Beispiel #1
0
        public SwipeEntity tcpToSwipe(string tcpMsg)
        {
            SwipeEntity swipte = new SwipeEntity();;
            var         items  = tcpMsg.Split(new string[] { @"/" }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string item in items)
            {
                var kvPair = item.Split(new string[] { @"=" }, StringSplitOptions.RemoveEmptyEntries);
                {
                    switch (kvPair[0].Trim())
                    {
                    case "ltim":    //时间
                        swipte.body.recordTime = DateTime.ParseExact(kvPair[1].Replace("W", "").Trim(), "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd HH:mm:ss");
                        break;

                    case "Devices.displaytext":    //设备名称
                        swipte.body.gateGuardName = kvPair[1].Replace("\"", "").Trim();
                        break;

                    case "Devices.id":    //设备编号
                        swipte.body.gateGuardCode = kvPair[1].Replace("\"", "").Trim();
                        break;

                    case "Cards.cardid":    //刷卡id

                        break;

                    case "Cards.cardno":    //刷卡no
                        swipte.body.cardCode = kvPair[1].Replace("\"", "").Trim();
                        break;

                    case "Persons.persid":    //刷卡人id

                        break;

                    case "Persons.persno":    //刷卡人no
                        swipte.body.empCode = kvPair[1].Replace("\"", "").Trim();
                        break;

                    case "Persons.firstname":    //刷卡人姓
                        swipte.body.empName += "" + kvPair[1].Replace("\"", "").Trim();
                        break;

                    case "Persons.lastname":    //刷卡人名
                        swipte.body.empName += "" + kvPair[1].Replace("\"", "").Trim();
                        break;

                    default:
                        break;
                    }
                }
            }
            return(swipte);
        }
Beispiel #2
0
        private void startListener()
        {
            IPAddress   address  = IPAddress.Parse(localIp);
            IPEndPoint  ep       = new IPEndPoint(address, int.Parse(port));
            TcpListener listener = new TcpListener(ep);

            listener.Start();

            startReceiveData();

            byte[] buffer = new byte[2 * 8192];
            var    sender = listener.AcceptTcpClient();

            sender.ReceiveBufferSize = 2 * 8192;
            // Set the timeout for synchronous receive methods to
            // 40 second (1000 milliseconds.) because after 30 seconds without any new message an ALIVE message
            // should be received
            sender.ReceiveTimeout = 60 * 1000;
            while (true)
            {
                // Accept connection again
                //
                if ((sender == null) || !sender.Connected)
                {
                    sender = listener.AcceptTcpClient();    // blocking call ...
                }
                // Try to read received message
                //
                int iReadNum = 0;
                iReadNum = sender.GetStream().Read(buffer, 0, sender.ReceiveBufferSize); //bytesize
                // Any message received?
                if (iReadNum == 0)
                {
                    // Here simple retry again.. Timeout and reconnect handling should be implemented
                    continue;
                }
                // Message received .. it is always of type unicode!
                string tcpMessage = System.Text.Encoding.Unicode.GetString(buffer).Substring(0, iReadNum / 2);
                Debug.WriteLine(tcpMessage);
                // The format of the received message string is described in the next chapter “Event messsages”
                if (tcpMessage.Contains("ALIVE="))//如果是心跳
                {
                    string dtStr = tcpMessage.Substring(tcpMessage.IndexOf("ALIVE="), 20);
                }
                if (tcpMessage.Contains("START=") || tcpMessage.Contains("ALIVE="))
                {
                    continue;
                }
                if (tcpMessage.Contains("MSGTEXT=\"door is closed\"") || tcpMessage.Contains("MSGTEXT=\"door is open\""))  //开门关门暂不处理
                {
                    continue;
                }
                else if (tcpMessage.Contains("MSGTEXT=\"access\"") || tcpMessage.Contains("MSGTEXT=\"access, via remote command\""))//合法卡刷卡、远程开门,发送至正常刷卡队列
                {
                    SwipeEntity swipte  = tcpToSwipe(tcpMessage);
                    string      message = swipte.toJson();
                    KafkaWorker.sendSwipeMessage(message);
                }
                else //报警信息发送至报警队列
                {
                    AlarmEntity alarm   = tcpToAlarm(tcpMessage);
                    string      message = alarm.toJson();
                    KafkaWorker.sendAlarmMessage(message);
                }
            }
        }