示例#1
0
 /// <summary>
 /// 수신 Data를 ReceiveQueue에 넣는다.
 /// </summary>
 /// <param name="sendobj">clsSendXComMsg</param>
 public void ReceiveEnqueue(clsMsg Rcvobj)
 {
     lock (_RecvQueue)
     {
         _RecvQueue.Enqueue(Rcvobj);
     }
 }
示例#2
0
 /// <summary>
 /// 전송할 Data를 Enqueue한다.
 /// </summary>
 public void SendEnqueue(clsMsg sendobj)
 {
     lock (_SendQueue)
     {
         _SendQueue.Enqueue(sendobj);
     }
 }
示例#3
0
文件: clsSocket.cs 项目: Deku164/T1
        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());
            }
        }
示例#4
0
        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 { }
        }
示例#5
0
        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 { }
        }
示例#6
0
 /// <summary>
 /// 전송할 Data를 큐에 넣는다.
 /// </summary>
 public void SetTransmit(clsMsg SendMsg)
 {
     try
     {
         SendEnqueue(SendMsg);
     }
     catch (Exception ex)
     {
         clsLOG.SetLOG(LOGTYPE.SYSTEMERROR, ex.ToString());
     }
 }
示例#7
0
 private void TransmitMsg_STD(clsMsg msg)
 {
     try
     {
         clsSocket.SendMSG(msg);
     }
     catch (Exception ex)
     {
         clsLOG.SetLOG(LOGTYPE.SYSTEMERROR, ex.ToString());
     }
 }
示例#8
0
        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());
            }
        }
示例#9
0
        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);
            }
        }
示例#10
0
        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
        }