public void FlushQueue() { if (this.CurrentAsyncResult != null) { PushMessageCollection messages = this.GetMessages(); this.CurrentAsyncResult.SendMessages(messages); this.CurrentAsyncResult.SetComplete(); this.CurrentAsyncResult = null; } }
private PushMessageCollection GetMessages() { lock (this._syncRootMessageQueue) { PushMessageCollection messages = new PushMessageCollection(); while (this.messageQueue.Count > 0) { messages.Add(this.messageQueue.Dequeue()); } return(messages); } }
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(); } }
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); } } }
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); } }
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(); } }