Example #1
0
        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);
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }