예제 #1
0
파일: Client.cs 프로젝트: radtek/EMIP
        public void FlushQueue()
        {
            if (this.CurrentAsyncResult != null)
            {
                PushMessageCollection messages = this.GetMessages();

                this.CurrentAsyncResult.SendMessages(messages);
                this.CurrentAsyncResult.SetComplete();
                this.CurrentAsyncResult = null;
            }
        }
예제 #2
0
파일: Client.cs 프로젝트: radtek/EMIP
 private PushMessageCollection GetMessages()
 {
     lock (this._syncRootMessageQueue)
     {
         PushMessageCollection messages = new PushMessageCollection();
         while (this.messageQueue.Count > 0)
         {
             messages.Add(this.messageQueue.Dequeue());
         }
         return(messages);
     }
 }
예제 #3
0
파일: Client.cs 프로젝트: radtek/EMIP
        public void ProcessRequest(AsyncResult result)
        {
            this.CurrentAsyncResult = result;
            this.LastConnectTime    = DateTime.Now;
            this._timer.Enabled     = true;

            PushMessageCollection messages = this.GetMessages();

            if (messages.Count != 0)
            {
                this.FlushQueue();
            }
        }
예제 #4
0
        public void PullProcess(object obj)
        {
            BPMConnection cn = null;
            string        server;
            string        strPort;
            int           port;
            string        clientid = null;

            server  = System.Web.Configuration.WebConfigurationManager.AppSettings["BPMServerName"];
            strPort = System.Web.Configuration.WebConfigurationManager.AppSettings["BPMServerPort"];

            if (!Int32.TryParse(strPort, out port))
            {
                port = BPMConnection.DefaultPort;
            }

            while (true)
            {
                try
                {
                    if (cn == null)
                    {
                        cn = new BPMConnection();
                        cn.OpenAnonymous(server, port);
                        clientid = cn.RegisterClient();
                    }

                    PushMessageCollection messages = cn.GetClientMessages(clientid);
                    this.DispatchMessage(messages);
                    Thread.Sleep(100);
                }
                catch (Exception)
                {
                    if (cn.IsOpen)
                    {
                        cn.Close();
                    }

                    cn = null;
                    Thread.Sleep(3000);
                }
            }
        }
예제 #5
0
        public void PushMessage(string clientid, BPMObjectNameCollection uids, string[] channels, YZMessage message, bool broadcast)
        {
            JObject jmessage = JObject.FromObject(message);

            PushMessageCollection pushMessages = new PushMessageCollection();

            foreach (string channel in channels)
            {
                PushMessage pushmessage = new BPM.PushMessage(clientid, uids, channel, jmessage);
                pushmessage.Broadcast = broadcast;
                pushMessages.Add(pushmessage);
            }

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                cn.Push(pushMessages);
            }
        }
예제 #6
0
        private void DispatchMessage(PushMessageCollection messages)
        {
            List <Client> clientsNotified = new List <Client>();

            foreach (PushMessage message in messages)
            {
                IEnumerable <Client> clients = ClientManager.Instance.GetClientsFromUIDs(message.Uids, message.Channel, message.Broadcast);

                foreach (Client client in clients)
                {
                    client.PushMessage(message);

                    if (!clientsNotified.Contains(client))
                    {
                        clientsNotified.Add(client);
                    }
                }
            }

            foreach (Client client in clientsNotified)
            {
                client.FlushQueue();
            }
        }