/// <summary> /// 수신 Data를 ReceiveQueue에 넣는다. /// </summary> /// <param name="sendobj">clsSendXComMsg</param> public void ReceiveEnqueue(clsMsg Rcvobj) { lock (_RecvQueue) { _RecvQueue.Enqueue(Rcvobj); } }
/// <summary> /// 전송할 Data를 Enqueue한다. /// </summary> public void SendEnqueue(clsMsg sendobj) { lock (_SendQueue) { _SendQueue.Enqueue(sendobj); } }
public void SendMSG(clsMsg NMSG) { try { if (NMSG.Port == 0) { NMSG.Port = ServerPort; } string KEY = NMSG.CLIENT_IP + ":" + NMSG.Port; //if (clsCommon.Instance.isServerOpen) { if (!clients.ContainsKey(KEY)) { OnErrorMsg("MSG SEND ERROR " + KEY + "\t" + " 연결되어 있지 않습니다."); return; } if (clients.ContainsKey(KEY)) { clients[KEY].UQueue.Enqueue(NMSG); } } //if(clsCommon.Instance.isClientConn) { } } catch (Exception ex) { OnErrorMsg("MSG SEND ERROR " + ex.ToString()); } }
private void RecvThread() { clsMsg recvMsg = null; try { while (clsCommon.Instance.ProgramRUN) { if (QueueManager.Instance.ReceiveQueueCount() > 0) { recvMsg = QueueManager.Instance.ReceiveDequeue(); } if (recvMsg != null) { RecvMsg_STD(recvMsg); } recvMsg = null; Thread.Sleep(10); } } catch (ThreadAbortException) { } catch { } }
private void SendThread() { clsMsg sendMsg = null; try { while (clsCommon.Instance.ProgramRUN) { if (QueueManager.Instance.SendQueueCount() > 0) { //딜레이가 있을 경우 현재 시간과 비교해서 해당 시간이 지난경우 보냄. sendMsg = QueueManager.Instance.SendDequeue(); } if (sendMsg != null) { TransmitMsg_STD(sendMsg); } sendMsg = null; Thread.Sleep(10); } } catch (ThreadAbortException) { } catch { } }
/// <summary> /// 전송할 Data를 큐에 넣는다. /// </summary> public void SetTransmit(clsMsg SendMsg) { try { SendEnqueue(SendMsg); } catch (Exception ex) { clsLOG.SetLOG(LOGTYPE.SYSTEMERROR, ex.ToString()); } }
private void TransmitMsg_STD(clsMsg msg) { try { clsSocket.SendMSG(msg); } catch (Exception ex) { clsLOG.SetLOG(LOGTYPE.SYSTEMERROR, ex.ToString()); } }
private void ClsSocket_OnReceiveDT(string ip, int port, object data, byte[] originalMsg) { string msg = string.Empty; try { //수신된 Original MSG를 로그 및 UI에 남긴다. clsLOG.SetLOG(LOGTYPE.Message, string.Format(" [<<-RECV] :{0}, \t{1}", ip, data)); //메세지 처리부 enQueue clsMsg Msg = new clsMsg { CLIENT_IP = ip, Port = port, S_DATA = data.ToString() }; QueueManager.Instance.ReceiveEnqueue(Msg); } catch (Exception ex) { clsLOG.SetLOG(LOGTYPE.SYSTEMERROR, ex.ToString()); } }
void PollCheck() { clsMsg UMSG = null; while (true) { if (clientSocket.Connected) { try { UMSG = null; //송신부 if (Uqueue.Count > 0) { UMSG = Uqueue.Dequeue(); byte[] CmdTemp = null; int nbufCnt = 0; if (UMSG != null) { //CmdTemp = StringToByte(UMSG.S_DATA + "\n\0"); CmdTemp = Encoding.UTF8.GetBytes(UMSG.S_DATA); nbufCnt = Encoding.UTF8.GetByteCount(UMSG.S_DATA); } else { continue; } Thread.Sleep(100); networkStream.Write(CmdTemp, 0, nbufCnt); clsLOG.SetLOG(LOGTYPE.Message, string.Format(" [SEND->>] :{0}\t{1}", UMSG.CLIENT_IP, UMSG.S_DATA)); } //수신부 if (ReciveQueue.Count > 0) { // GPS / BLE Data // 이번에는 구분자가 STX, ETX 재대로 들어오니까 수정. byte[] data = ReciveQueue.Dequeue(); string sdata = Encoding.ASCII.GetString(data).Trim('\0'); string[] arr_sdata = sdata.Split(new char[] { '\u0002', '\u0003' }, StringSplitOptions.RemoveEmptyEntries); foreach (string temp in arr_sdata) { OnReceiveData(IP, PORT, temp, data); } //int nStartIdx = -1; //int nEndIdx = -1; //byte[] data = ReciveQueue.Dequeue(); //string sdata = Encoding.ASCII.GetString(data).Trim('\0'); //if (OnReceiveData != null) //{ // for(int nloop = 0; nloop < sdata.Length; nloop+=2) // { // if(sdata[nloop].ToString() + sdata[nloop + 1].ToString() == "02") // { // nStartIdx = nloop; // } // if (sdata[nloop].ToString() + sdata[nloop + 1].ToString() == "03") // { // nEndIdx = nloop + 1; // } // if(nStartIdx != -1 && nEndIdx != -1) // { // OnReceiveData(IP, PORT, sdata.Substring(nStartIdx, (nEndIdx + 1) - nStartIdx), data); // nStartIdx = -1; // nEndIdx = -1; // } // } //string[] msgCode = sdata.Split(new string[] { "02", "03" }, StringSplitOptions.RemoveEmptyEntries); //for (int nloop = 0; nloop < msgCode.Length; ++nloop) //{ // msgCode[nloop] = msgCode[nloop].Replace("-", ""); // if (msgCode[nloop] != string.Empty) // { // if (msgCode[nloop].Length > 10) // { // OnReceiveData(IP, PORT, msgCode[nloop], data); // } // } //} _recvBuffer.Clear(); //} } } catch (Exception ex) { Console.WriteLine(ex.Message + ex.StackTrace); } } else { connected = false; break; } Thread.Sleep(150); } connected = false; clientSocket.Close(); if (OnDisconnected != null) { OnDisconnected(this); } }
private void RecvMsg_STD(clsMsg msg) { try { QueueManager.Instance.MainUISendEnqueue(msg.S_DATA); //0001B50:8d:6f:b0:02:11,-71 //DB 저장 프로시저 호출 if (msg.S_DATA.Length > 10) { cmd.Parameters["@P_DEVICE_ID"].Value = msg.S_DATA.Substring(0, 4); cmd.Parameters["@P_DATA_TYPE"].Value = msg.S_DATA.Substring(4, 1); cmd.Parameters["@P_RAW_DATA"].Value = msg.S_DATA.Substring(5); cmd.ExecuteNonQuery(); } } catch (Exception) { throw; } #region "gas data 주석처리" //string parseData = string.Empty; //string groupID = string.Empty; //string sensorID = string.Empty; //string data_1 = string.Empty; //string data_2 = string.Empty; //string data_3 = string.Empty; //string unit_1 = string.Empty; //string unit_2 = string.Empty; //string unit_3 = string.Empty; //string str = string.Empty; //int imsi_DeviceID = 0; //int imsi_FormatIDX = 0; //string imsi_row = string.Empty; //MySqlCommand cmd; //try //{ // parseData = ConvertHex(msg.S_DATA.Substring(2, msg.S_DATA.Length - 4)); // //parseData = msg.S_DATA.Substring(2,msg.S_DATA.Length -4); // clsLOG.SetLOG(LOGTYPE.Message, string.Format(" [<<-RECV] :{0}\t{1}", "변환 Data", parseData)); // //파싱 // groupID = parseData.Substring(0, 2); // //임시 // switch(groupID) // { // case "FF": // imsi_DeviceID = 2; // break; // case "FE": // imsi_DeviceID = 3; // break; // case "FD": // imsi_DeviceID = 4; // break; // } // //groupID = "10"; // sensorID = parseData.Substring(2, 2); // switch (sensorID) // { // case "01": // imsi_FormatIDX = 7; // break; // case "02": // imsi_FormatIDX = 8; // break; // case "03": // imsi_FormatIDX = 9; // break; // case "05": // imsi_FormatIDX = 10; // break; // } // unit_1 = parseData.Substring(4, 1); // switch(unit_1) // { // //황화수소 // case "S": // data_1 = parseData.Substring(5, 6); // unit_2 = parseData.Substring(11, 1); // data_2 = parseData.Substring(12, 2); // str = "INSERT INTO data " + // "(format_idx, device_idx, raw) VALUES (7, '" + // groupID + "', '" + // msg + "')"; // break; // //산소 // case "O": // //임시로 차트에 백분위 표시로 변경 // //data_1 = parseData.Substring(5, 6); // //unit_2 = parseData.Substring(11, 1); // //data_2 = parseData.Substring(12, 6); // data_2 = parseData.Substring(5, 6); // unit_2 = parseData.Substring(11, 1); // data_1 = parseData.Substring(12, 6); // str = "INSERT INTO data " + // "(format_idx, device_idx, raw) VALUES (8, '" + // groupID + "', '" + // msg + "')"; // break; // //이산화탄소 // case "C": // data_1 = parseData.Substring(5, 5); // unit_2 = parseData.Substring(10, 1); // data_2 = parseData.Substring(11, 5); // str = "INSERT INTO data " + // "(format_idx, device_idx, raw) VALUES (9, '" + // groupID + "', '" + // msg + "')"; // break; // //분진 사용 X // case "X": // data_1 = parseData.Substring(5, 5); // unit_2 = parseData.Substring(10, 1); // data_2 = parseData.Substring(11, 5); // unit_3 = parseData.Substring(16, 1); // data_3 = parseData.Substring(17, 5); // break; // //온습도 // case "T": // data_1 = parseData.Substring(5, 4); // unit_2 = parseData.Substring(9, 1); // data_2 = parseData.Substring(10, 4); // str = "INSERT INTO data " + // "(format_idx, device_idx, raw) VALUES (10, '" + // groupID + "', '" + // msg + "')"; // break; // } // //cmd = new MySqlCommand(str, connection); // //int result = cmd.ExecuteNonQuery(); // cmd = new MySqlCommand(); // cmd.Connection = connection; // cmd.CommandType = CommandType.StoredProcedure; // cmd.CommandText = "INSERT_DATA"; // MySqlParameter pin1 = new MySqlParameter("_DEVICE_IDX", MySqlDbType.Int32); // pin1.Direction = ParameterDirection.Input; // pin1.Value = 0; // cmd.Parameters.Add(pin1); // MySqlParameter pin2 = new MySqlParameter("_FORMAT_IDX", MySqlDbType.Int32); // pin2.Direction = ParameterDirection.Input; // pin2.Value = imsi_FormatIDX; // cmd.Parameters.Add(pin2); // MySqlParameter pin3 = new MySqlParameter("_RAW", MySqlDbType.VarChar); // pin3.Direction = ParameterDirection.Input; // pin3.Value = groupID + "," + sensorID + "," + data_1 + "," + data_2; // cmd.Parameters.Add(pin3); // MySqlParameter pout1 = new MySqlParameter("RESULT", MySqlDbType.Int32, 1); // pout1.Direction = ParameterDirection.Output; // cmd.Parameters.Add(pout1); // int rst = cmd.ExecuteNonQuery(); //} //catch (Exception ex) //{ // Debug.WriteLine(ex.ToString()); //} #endregion }