コード例 #1
0
        /// <summary>  Обработчик получения данных из сокета  </summary>
        /// <param name="byteRecv">Кол-во байт принятых.</param>
        /// <param name="recvData">Принятые данные</param>
        /// <returns></returns>
        private int GetDataFromSocket(object baseObj, int byteRecv, byte[] recvData)
        {
            if (byteRecv == 0)
            {
                return(0);
            }
            MManager mm = (MManager)baseObj;

            //Дополняем сообщение предыдущей частью
            string content = mm.LastMessagePart + Encoding.GetEncoding(1251).GetString(recvData, 0, byteRecv);

            mm.LastMessagePart = "";

            int indLastSpliter = content.LastIndexOf(MManager.SpliterMsg);

            if (indLastSpliter + 1 != content.Length)
            {
                mm.LastMessagePart = content.Substring(indLastSpliter + 1, content.Length - indLastSpliter - 1);
            }
            content = content.Substring(0, indLastSpliter > 0 ? indLastSpliter + 1 : indLastSpliter);

            if (content.Length > 0)
            {
                this.Msg.Add(content);
            }
            return(byteRecv);
        }
コード例 #2
0
        /// <summary> Обработчик сообщейни из стека </summary>
        /// <param name="classMM"></param>
        private void eventMessage(object classMM)
        {
            if (classMM.IsNull())
            {
                return;
            }
            Qlog.CatchException(() =>
            {
                MManager mmcl = (MManager)classMM;
                if (mmcl.Msg.Count > 0)
                {
                    string message = mmcl.Msg.getFirst;
                    mmcl.Msg.DeleteFirst();

                    string[] AllParts = message.Split(MManager.SpliterMsg);
                    if (AllParts.Length > 0)
                    {
                        for (int i = 0; i < AllParts.Length; i++)
                        {
                            if (AllParts[i] == "")
                            {
                                continue;
                            }
                            if (AllParts[i].Contains("ServerCommand"))
                            {
                                this.MsgSys.Add(AllParts[i]);
                            }
                            else
                            {
                                mmcl.Convertor.NewMessage(new ServiceMessage(AllParts[i]));
                            }
                        }
                    }
                    this._threadNewEvent = null;
                }
            });
        }
コード例 #3
0
        /// <summary> Инициализация потоков сообщений, управляет входящими и исходящими сообщениями. </summary>
        public void InitThreadsMessages()
        {
            if (this.BaseMManager)
            {
                Thread ThreadSendMsg = null;
                //Основной цикл приема сообщений
                ParameterizedThreadStart actionSendMessage = (object classMM) =>
                {
                    MManager mm = (MManager)classMM;
                    while (MManager.LoopProcessing)
                    {
                        //Отправка
                        mm.ProcessSendMessage();
                        Thread.Sleep(1);
                    }
                    mm.qSocket.CloseSocket();
                };
                ThreadSendMsg          = new Thread(actionSendMessage);
                ThreadSendMsg.Priority = ThreadPriority.Highest;
                ThreadSendMsg.Start(this);
            }

            Thread MainThreadProcMsg = null;
            //Основной цикл приема сообщений
            ParameterizedThreadStart actionMessage = (object classMM) =>
            {
                MManager mm = (MManager)classMM;
                while (MManager.LoopProcessing)
                {
                    //Получает данные с сокета
                    mm.qSocket.Receive(mm);
                    //Обработка полученных системных сообщений
                    mm.ProcessSysMessage();
                    //Обработка полученных сообщений
                    mm.ProcessMessage();
                    Thread.Sleep(1);
                }
                mm.qSocket.CloseSocket();
            };

            MainThreadProcMsg          = new Thread(actionMessage);
            MainThreadProcMsg.Priority = ThreadPriority.Normal;
            MainThreadProcMsg.Start(this);

            if (this.BaseMManager)
            {
                Thread ThreadConvertor = null;
                //Основной цикл конвертора
                ParameterizedThreadStart actionThreadConvertor = (object classMM) =>
                {
                    MManager mm = (MManager)classMM;
                    while (MManager.LoopProcessing)
                    {
                        //Отправка
                        mm.Convertor.ProcessConvert();
                        Thread.Sleep(1);
                    }
                    mm.qSocket.CloseSocket();
                };
                ThreadConvertor          = new Thread(actionThreadConvertor);
                ThreadConvertor.Priority = ThreadPriority.Highest;
                ThreadConvertor.Start(this);
            }
        }