void topicgo() { while (true) { String[] keys = WMQTOPICList.Keys.ToArray(); foreach (string key in keys) { if (WMQTOPICList[key].wdata.Count > 0) { LinkedList <WMQData> wdata = WMQTOPICList[key].wdata; int len = wdata.Count; WMQData[] WMQDatas = new WMQData[len]; wdata.CopyTo(WMQDatas, 0); LinkedList <Socket> socs = WMQTOPICList[key].ALLsoc; len = socs.Count; Socket[] Sockets = new Socket[len]; socs.CopyTo(Sockets, 0); foreach (WMQData wd in WMQDatas) { foreach (Socket soc in Sockets) { Send <WMQData>(soc, 0x02, wd); } wdata.Remove(wd); } } } System.Threading.Thread.Sleep(10); } }
void addtopic(WMQData wmqd) { if (!WMQTOPICList.ContainsKey(wmqd.to)) { WMQTOPIC wtpic = new WMQTOPIC(); wtpic.topic = wmqd.to; wtpic.wdata.AddLast(wmqd); WMQTOPICList.Add(wmqd.to, wtpic); } else { WMQTOPIC wtpic = WMQTOPICList[wmqd.to]; wtpic.topic = wmqd.to; wtpic.wdata.AddLast(wmqd); //WMQTOPICList.Add(wmqd.to, wtpic); } }
public bool EXEC(byte command, string data, System.Net.Sockets.Socket soc) { try { WMQData wmqd = new WMQData(); switch (command) { case 0: RegData rd = Newtonsoft.Json.JsonConvert.DeserializeObject <RegData>(data); if (rd.type == "topic") { rd.soc = soc; addtopicsoc(rd); } else { WMQueuesoc wq = new WMQueuesoc(); wq.token = rd.to; wq.soc = soc; WMQueuesoclink.AddLast(wq); } break; case 1: wmqd = Newtonsoft.Json.JsonConvert.DeserializeObject <WMQData>(data); wmqd.ctime = DateTime.Now; WMQDatalink.AddLast(wmqd); break; case 2: wmqd = Newtonsoft.Json.JsonConvert.DeserializeObject <WMQData>(data); wmqd.ctime = DateTime.Now; addtopic(wmqd); break; } } catch { return(false); } return(true); }
void Queuego() { while (true) { try { if (WMQDatalink.Count > 0) { WMQData wmq = WMQDatalink.First(); if (wmq != null) { int len = WMQueuesoclink.Count; WMQueuesoc[] wmqsoc = new WMQueuesoc[len]; WMQueuesoclink.CopyTo(wmqsoc, 0); bool isok = false; foreach (WMQueuesoc wmqs in wmqsoc) { if (wmq.to == wmqs.token) { isok = Send <WMQData>(wmqs.soc, 0x01, wmq); break; } } if (wmq.ctime.AddMilliseconds(wmq.Validityperiod) > DateTime.Now && isok == false) { WMQDatalink.AddLast(wmq); } WMQDatalink.RemoveFirst(); } } } catch (Exception) { }; System.Threading.Thread.Sleep(10); } }