//        delegate void EventThread(int i);


        public int Create(string body)
        {
/*
 *          web_service l_ws = new web_service();
 *          FileStream fs = new FileStream("test.txt", FileMode.Open);
 *          XmlSerializer x = new XmlSerializer(typeof(web_service));
 *          web_service g = new web_service();
 *          g = (web_service)x.Deserialize(fs);
 *          Type tp  = g.Item.GetType();
 *          return 0;
 */
            m_EventHandler  = new eventhandler();
            m_EventResponse = new eventhandler_response();
            m_ws            = new web_service();
            return(Subscribe(body));
        }
 //        delegate void EventThread(int i);
 public int Create(string body)
 {
     /*
     web_service l_ws = new web_service();
     FileStream fs = new FileStream("test.txt", FileMode.Open);
     XmlSerializer x = new XmlSerializer(typeof(web_service));
     web_service g = new web_service();
     g = (web_service)x.Deserialize(fs);
     Type tp  = g.Item.GetType();
     return 0;
     */
     m_EventHandler = new eventhandler();
     m_EventResponse = new eventhandler_response();
     m_ws = new web_service();
     return Subscribe(body);
 }
        private int Subscribe(string body) // sends POST method with event handler parameters
        {
            eventsubscribe[] es = new eventsubscribe[1];
            es[0]                         = new eventsubscribe();
            es[0].resource_id             = "any";
            es[0].action                  = action_option.add;
            es[0].type                    = event_type.any;
            m_EventHandler.eventsubscribe = es;

            m_ws.Item = m_EventHandler as eventhandler;

            HttpWebRequest l_request = XmsInterface.CreateRequest("POST", "eventhandlers", "");

//            HttpWebRequest l_request = XmsInterface.CreateRequest("GET", "calls", "");

/*
 *          l_request.Accept =  "application/xml";
 *          l_request.ContentType = "application/xml";
 *
 *          l_request.ContentLength = (XmsInterface.ObjectToString(m_ws)).Length;
 *          l_request.SendChunked = false;
 *          l_request.Expect = null;
 *          l_request.KeepAlive = false;
 *
 *          l_request.ProtocolVersion = HttpVersion.Version10;
 */


            using (Stream l_requestStream = l_request.GetRequestStream())
            {
                XmlSerializer x = new XmlSerializer(typeof(web_service));
                x.Serialize(l_requestStream, m_ws);
            }

            /*
             *        if (body.Length > 0)
             *        {
             *            using (Stream requestStream = l_request.GetRequestStream())
             *            using (StreamWriter writer = new StreamWriter(requestStream))
             *            {
             *                writer.Write(body);
             *            }
             *        }
             *
             */string l_srequest = XmsInterface.RequestToString(l_request, m_ws);

            Logger.Log(l_srequest, true);
            HttpWebResponse l_response = null;

            try
            {
                l_response = (HttpWebResponse)l_request.GetResponse();

                if (l_response.StatusCode != HttpStatusCode.Created)
                {
                    // process response here

                    Logger.Log(XmsInterface.ResponseToString(l_response), false);
                    return(-1);
                }
                l_request.GetRequestStream().Close();
            }
            catch (Exception ex)
            {
                Logger.Log("ERROR: " + ex.Message, false);
                return(-1);
            }

            using (Stream l_responseStream = l_response.GetResponseStream())
            {
                XmlSerializer x = new XmlSerializer(typeof(web_service));
                m_ws = (web_service)x.Deserialize(l_responseStream);
            }
            l_srequest = XmsInterface.ResponseToString(l_response);
            l_response.Close();


            Logger.Log(l_srequest, false);
            Type tp = m_ws.Item.GetType();

            switch (tp.Name)
            {
            case "eventhandler_response":
                eventhandler_response l_ehr = (eventhandler_response)m_ws.Item;
                EventHandler.m_href        = l_ehr.href;
                EventHandler.m_hId         = l_ehr.identifier;
                m_isRunning                = true;
                m_eventThread              = new Thread(EventHandler.EventThread);
                m_eventThread.IsBackground = true;
                m_eventThread.Start();


//                    l_response = (HttpWebResponse)l_request.GetResponse();
//                    m_eventStream = l_response.GetResponseStream();
//                    m_asyncResult = m_eventStream.BeginRead(m_eventBuffer, 0, 512, m_callback, null);

                break;
            }


/*
 *              using (Stream l_requestStream = l_request.GetRequestStream())
 *              {
 *              }
 * //                using (StreamWriter l_writer = new StreamWriter(l_requestStream))
 *
 *
 *              using (Stream l_requestStream = l_request.GetRequestStream())
 *              using (StreamWriter l_writer = new StreamWriter(l_requestStream))
 *              {
 *                  l_writer.Write(a_xmlPayload);
 *              }
 *          }
 *
 *
 *          web_service l_ws = new web_service();
 *          FileStream fs = new FileStream("CsDemo.log", FileMode.Open);
 *          XmlSerializer x = new XmlSerializer(typeof(web_service));
 *          web_service g = new web_service();
 *          g = (web_service)x.Deserialize(fs);
 *          Type tp  = g.Item.GetType();
 *          switch (tp.Name)
 *          {
 *              case "eventhandler_response":
 *                  eventhandler_response l_ehr = (eventhandler_response) g.Item;
 *                  this.m_href = l_ehr.href;
 *                  this.m_hId = l_ehr.identifier;
 *                  break;
 *          }
 *
 *
 *
 *
 *
 *          string it = "";
 * //            it = g.Item.ToString();
 * /*
 *          Console.WriteLine(g.Manager.Name);
 *          Console.WriteLine(g.GroupID);
 *          Console.WriteLine(g.HexBytes[0]);
 *          foreach (Employee e in g.Employees)
 *          {
 *              Console.WriteLine(e.Name);
 *          }
 *
 *
 *
 *          eventsubscribe[] es = new eventsubscribe[1];
 *          es[0] = new eventsubscribe();
 *          es[0].resource_id = "none";
 *          es[0].action = action_option.remove;
 *          es[0].type = event_type.any;
 *          eventhandler eh = new eventhandler();
 *          eh.eventsubscribe = es;
 *
 *          l_ws.Item = eh as eventhandler;
 *
 *
 *          using (StreamWriter sw = new StreamWriter("CsDemo.log"))
 *          {
 *
 *              new XmlSerializer(typeof(web_service)).Serialize(sw, l_ws);
 *          }
 *
 *
 *
 *          string str = "";
 *          using (StreamWriter sw = new StreamWriter(str))//("CsDemo.log"))
 *          {
 *
 *              new XmlSerializer(typeof(eventhandler)).Serialize(sw, eh);
 *          }
 */
            return(0);
        }