/// <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); }
/// <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; } }); }
/// <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); } }