| | |
| | | /// <summary> |
| | | /// 接收到的数据 |
| | | /// </summary> |
| | | public byte [] Bytes; |
| | | public byte[] Bytes; |
| | | |
| | | /// <summary> |
| | | /// 远程的套接字 |
| | | /// </summary> |
| | | public System.Net.EndPoint RemoteEndPoint; |
| | | |
| | | public Packet () |
| | | public Packet() |
| | | { |
| | | this.Bytes = new byte [Size]; |
| | | RemoteEndPoint = (System.Net.EndPoint)new System.Net.IPEndPoint (System.Net.IPAddress.Any, 0); |
| | | this.Bytes = new byte[Size]; |
| | | RemoteEndPoint = (System.Net.EndPoint)new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0); |
| | | } |
| | | public Packet (byte [] data, System.Net.EndPoint remoteEndPoint) |
| | | public Packet(byte[] data, System.Net.EndPoint remoteEndPoint) |
| | | { |
| | | this.Bytes = data; |
| | | this.RemoteEndPoint = remoteEndPoint; |
| | |
| | | /// </summary> |
| | | public int HaveSendCount; |
| | | |
| | | public delegate void DelegateReceive (byte subnetID, byte deviceID, Command command, byte [] usefullBytes, string revGatewayIP); |
| | | public delegate void DelegateReceive(byte subnetID, byte deviceID, Command command, byte[] usefullBytes, string revGatewayIP); |
| | | public static event DelegateReceive ReceiveEvent; |
| | | /// <summary> |
| | | /// 接收到的所有数据 |
| | | /// </summary> |
| | | public static Action<byte, byte, int, Command, byte, byte, byte [], System.Net.IPEndPoint> ReceviceAllDadaAction; |
| | | public static Action<byte, byte, int, Command, byte, byte, byte[], System.Net.IPEndPoint> ReceviceAllDadaAction; |
| | | /// <summary> |
| | | /// 处理接收到的数据 |
| | | /// </summary> |
| | | public virtual void Manager () |
| | | public virtual void Manager() |
| | | { |
| | | //对于操作数据库的时间比较长的,可以创建另一个线程处理 |
| | | if (!"HDLMIRACLE".Equals (System.Text.Encoding.ASCII.GetString (Bytes, 4, 10))) { |
| | | return; |
| | | if (((System.Net.IPEndPoint)RemoteEndPoint).Port == 6688) |
| | | { |
| | | ReceviceAllDadaAction?.Invoke(0, 0, 0, 0, 0, 0, Bytes, (System.Net.IPEndPoint)RemoteEndPoint); |
| | | Control.ManagerReceive(0, 0, 0, 0, 0, Bytes, (System.Net.IPEndPoint)RemoteEndPoint); |
| | | } |
| | | else |
| | | { |
| | | //对于操作数据库的时间比较长的,可以创建另一个线程处理 |
| | | if (!"HDLMIRACLE".Equals(System.Text.Encoding.ASCII.GetString(Bytes, 4, 10))) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | byte subnetID = this.Bytes [17]; //源子网号 |
| | | byte deviceID = this.Bytes [18]; //源设备号 |
| | | byte subnetID = this.Bytes[17]; //源子网号 |
| | | byte deviceID = this.Bytes[18]; //源设备号 |
| | | |
| | | //源设备类型 |
| | | int deviceType = this.Bytes [19] * 256 + this.Bytes [20]; |
| | | //源设备类型 |
| | | int deviceType = this.Bytes[19] * 256 + this.Bytes[20]; |
| | | |
| | | Command command = (Command)(Bytes [21] * 256 + Bytes [22]); //操作码控制命令 |
| | | Command command = (Command)(Bytes[21] * 256 + Bytes[22]); //操作码控制命令 |
| | | |
| | | byte targetSubnetID = this.Bytes [23]; |
| | | byte targetDeviceID = this.Bytes [24]; |
| | | byte targetSubnetID = this.Bytes[23]; |
| | | byte targetDeviceID = this.Bytes[24]; |
| | | |
| | | //不是要接收的指令就返回 |
| | | if (!((targetSubnetID == 252 && targetDeviceID == 252) || (targetSubnetID == 0xff && targetDeviceID == 0xff))) { |
| | | return; |
| | | //不是要接收的指令就返回 |
| | | if (!((targetSubnetID == 252 && targetDeviceID == 252) || (targetSubnetID == 0xff && targetDeviceID == 0xff))) |
| | | { |
| | | return; |
| | | } |
| | | byte[] usefulBytes = null; |
| | | if (this.Bytes[16] == 0xFF) |
| | | { |
| | | usefulBytes = new byte[Bytes.Length - 16 - 11]; |
| | | System.Array.Copy(Bytes, 27, usefulBytes, 0, usefulBytes.Length); |
| | | } |
| | | else |
| | | { |
| | | //有用的附加数据 |
| | | usefulBytes = new byte[this.Bytes[16] - 11]; |
| | | Array.Copy(Bytes, 25, usefulBytes, 0, usefulBytes.Length); |
| | | } |
| | | |
| | | if (ReceiveEvent != null) |
| | | { |
| | | string revIp = $"{Bytes[0]}.{Bytes[1]}.{Bytes[2]}.{Bytes[3]}"; |
| | | if (revIp == "172.16.2.237") |
| | | { |
| | | |
| | | } |
| | | ReceiveEvent(subnetID, deviceID, command, usefulBytes, revIp); |
| | | } |
| | | |
| | | //if (command == Command.SuperGatewayAgentACK) { |
| | | // SuperGateWay.SendAndReceiveDatas.Recevice (subnetID, deviceID, usefulBytes); |
| | | //} |
| | | if (ReceviceAllDadaAction != null) |
| | | { |
| | | ReceviceAllDadaAction(subnetID, deviceID, deviceType, command, targetSubnetID, targetDeviceID, usefulBytes, (System.Net.IPEndPoint)RemoteEndPoint); |
| | | } |
| | | //处理是否要重发数据 |
| | | Control.ManagerReceive(subnetID, deviceID, command, targetSubnetID, targetDeviceID, usefulBytes, RemoteEndPoint); |
| | | |
| | | } |
| | | byte [] usefulBytes = null; |
| | | if (this.Bytes [16] == 0xFF) { |
| | | usefulBytes = new byte [Bytes.Length - 16 - 11]; |
| | | System.Array.Copy (Bytes, 27, usefulBytes, 0, usefulBytes.Length); |
| | | } else { |
| | | //有用的附加数据 |
| | | usefulBytes = new byte [this.Bytes [16] - 11]; |
| | | Array.Copy (Bytes, 25, usefulBytes, 0, usefulBytes.Length); |
| | | } |
| | | |
| | | if (ReceiveEvent != null) { |
| | | ReceiveEvent (subnetID, deviceID, command, usefulBytes, $"{Bytes [0]}.{Bytes [1]}.{Bytes [2]}.{Bytes [3]}"); |
| | | } |
| | | |
| | | //if (command == Command.SuperGatewayAgentACK) { |
| | | // SuperGateWay.SendAndReceiveDatas.Recevice (subnetID, deviceID, usefulBytes); |
| | | //} |
| | | if (ReceviceAllDadaAction != null) { |
| | | ReceviceAllDadaAction (subnetID, deviceID, deviceType, command, targetSubnetID, targetDeviceID, usefulBytes, (System.Net.IPEndPoint)RemoteEndPoint); |
| | | } |
| | | //处理是否要重发数据 |
| | | Control.ManagerReceive (subnetID, deviceID, command, targetSubnetID, targetDeviceID, usefulBytes, RemoteEndPoint); |
| | | |
| | | } |
| | | } |
| | | } |