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