/// <summary> /// 响应串口层上传的数据 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void ReceiveData(object sender, DataTransmissionEventArgs args) { AsyncSocketUserToken socket = args.Token; if (socket == null) { return; } long ip = ControllerManager.GetLongIPFromSocket(socket); SocketBuffer buffer = null; lock (m_HashReceivedBuffer) { if (m_HashReceivedBuffer.ContainsKey(ip)) { buffer = (SocketBuffer)m_HashReceivedBuffer[ip]; } else { buffer = new SocketBuffer(); m_HashReceivedBuffer.Add(ip, buffer); } buffer.RemoteSock = socket; //lxm 20161013修改,传入的字节流要进行一次转换,将字符字节两两合成一个16进制数据,比如:'F'和'5' 合成0xF5 buffer.ReceivedCharBuffer.AddRange(args.EventData); args.EventData.Clear(); buffer.IsReady = Char2Hex(buffer); if (buffer.IsReady) { m_SemReceiveCommand.Release(1); } } }
/// <summary> /// 删除序列号 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void AntiMapIPFromWifi(object sender, DataTransmissionEventArgs args) { if (args.Token != null) { AsyncSocketUserToken socket = args.Token; if (socket.ConnectSocket == null || socket.ConnectSocket.RemoteEndPoint == null) { return; } if (SocketConnectOrCloseResponse != null) { SocketConnectOrCloseResponse(this, new SocketConnectArgs(false, socket)); } long ip = ControllerManager.GetLongIPFromSocket(socket); Controller controller = ControllerManager.Instance().Get(ip); if (controller != null) { controller.SocketToken = null; } lock (m_HashReceivedBuffer) { if (m_HashReceivedBuffer.ContainsKey(ip)) { m_HashReceivedBuffer.Remove(ip); } } } }
/// <summary> /// 发送给WIFI /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void MapIPFromWifi(object sender, DataTransmissionEventArgs args) { if (args.Token.ConnectSocket != null) { AsyncSocketUserToken socket = args.Token; long ip = ControllerManager.GetLongIPFromSocket(socket); Controller controller = ControllerManager.Instance().Get(ip); if (controller != null) { if (controller.SocketToken != null) { AsyncServer.Instance().CloseClientSocketEx(controller.SocketToken); } controller.SocketToken = socket; if (SocketConnectOrCloseResponse != null) { SocketConnectOrCloseResponse(this, new SocketConnectArgs(true, socket)); } //新连接的客户端要对它发送泵类型指令 if (SendPumpType2Wifi != null) { SendPumpType2Wifi(this, new SocketConnectArgs(true, socket)); } } else { if (m_Device != null) { m_Device.CloseClientSocket(args.Token); } Logger.Instance().ErrorFormat("MapIPFromWifi()->ControllerManager.Instance().Get 错误,IP={0}", ip); return; } } }
/// <summary> /// 连接关闭时,要将对应的命令队列清除 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnRemoveCommandQueue(object sender, DataTransmissionEventArgs args) { AsyncSocketUserToken socket = args.Token; if (socket != null) { long ip = ControllerManager.GetLongIPFromSocket(socket); m_Queue.ClearQueue(ip); m_WaitQueue.ClearQueue(ip); } }