public static FrameClass SendAndReceive(byte[] sendCommand, IPAddress checkIP, IPAddress ip, byte identifier, Batman batman) { DataListManger.ClearFrameClass(identifier); sendCommand[1] = identifier; IPEndPoint ipEndPoint = new IPEndPoint(ip, CommunicationClass.REMOTEPORT); batman.WorkSocket.SendTo(sendCommand, (EndPoint)ipEndPoint); Thread.Sleep(50); FrameClass revFrameClass = DataListManger.GetRevFrameClass(identifier, checkIP); int num1 = 0; int num2 = 200; while (revFrameClass == null && num1 < 6) { Thread.Sleep(num2 * ++num1); revFrameClass = DataListManger.GetRevFrameClass(identifier, checkIP); if (revFrameClass == null && num1 % 2 == 1) { identifier = Controller.GetNewCommandID(); sendCommand[1] = identifier; batman.WorkSocket.SendTo(sendCommand, (EndPoint)ipEndPoint); } } DataListManger.ClearFrameClass(identifier); return(revFrameClass); }
public static void SendUdp(FrameClass sendCommand, Batman batman) { sendCommand.Frame.CopyTo((Array)batman.SendBuffer, 0); IPEndPoint ipEndPoint = new IPEndPoint(sendCommand.CommIP, CommunicationClass.REMOTEPORT); batman.WorkSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); batman.WorkSocket.SendTo(batman.SendBuffer, 0, (int)sendCommand.Length, SocketFlags.None, (EndPoint)ipEndPoint); }
public byte[] GetIPData() { if (this.canDNS || !this.dev.IsNewVersion) { return(Encoding.ASCII.GetBytes(this.ip)); } int interIp = FrameClass.getInterIP(IPAddress.Parse(this.ip)); return(new byte[4] { (byte)(interIp >> 24), (byte)(interIp >> 16), (byte)(interIp >> 8), (byte)interIp }); }
public static FrameClass GetRevFrameClass(byte identifier, IPAddress checkIP) { lock (DataListManger.syncRoot) { for (int local_0 = 0; local_0 < DataListManger.RevOList.Count; ++local_0) { if ((int)DataListManger.RevOList[local_0].Identifier == (int)identifier && (checkIP == null || DataListManger.RevOList[local_0].IpAddr.Equals((object)checkIP))) { FrameClass local_1 = DataListManger.RevOList[local_0]; DataListManger.RevOList.RemoveAt(local_0); return(local_1); } } } return((FrameClass)null); }
public static FrameClass SendAndReceive(FrameClass sendCommand, Batman batman) { DataListManger.ClearFrameClass(sendCommand.Identifier); CommunicationClass.SendUdp(sendCommand, batman); Thread.Sleep(50); FrameClass revFrameClass = DataListManger.GetRevFrameClass(sendCommand.Identifier, sendCommand.IpAddr); int num1 = 0; int num2 = 200; while (revFrameClass == null && num1 < 6) { Thread.Sleep(num2 * ++num1); revFrameClass = DataListManger.GetRevFrameClass(sendCommand.Identifier, sendCommand.IpAddr); if (revFrameClass == null && num1 % 2 == 1) { CommunicationClass.SendUdp(sendCommand, batman); } } DataListManger.ClearFrameClass(sendCommand.Identifier); return(revFrameClass); }
private void createCommand() { this.frame[1] = this.identifier; ushort num1 = (ushort)4; switch (this.commType) { case CommunicationTypes.UDP: this.frame[0] = (byte)((uint)this.commandOrResponse + (uint)this.controlType * 2U); break; case CommunicationTypes.Broadcast: int interIp = FrameClass.getInterIP(this.ipAddr); byte[] numArray1 = this.frame; int index1 = (int)num1; int num2 = 1; ushort num3 = (ushort)(index1 + num2); int num4 = (int)(byte)(interIp >> 24); numArray1[index1] = (byte)num4; byte[] numArray2 = this.frame; int index2 = (int)num3; int num5 = 1; ushort num6 = (ushort)(index2 + num5); int num7 = (int)(byte)(interIp >> 16); numArray2[index2] = (byte)num7; byte[] numArray3 = this.frame; int index3 = (int)num6; int num8 = 1; ushort num9 = (ushort)(index3 + num8); int num10 = (int)(byte)(interIp >> 8); numArray3[index3] = (byte)num10; byte[] numArray4 = this.frame; int index4 = (int)num9; int num11 = 1; num1 = (ushort)(index4 + num11); int num12 = (int)(byte)interIp; numArray4[index4] = (byte)num12; this.frame[0] = (byte)((int)this.commandOrResponse + (int)this.controlType * 2 + 128); break; default: return; } if (this.optionList != null) { for (int index5 = 0; index5 < this.optionList.Count; ++index5) { if (this.optionList[index5].Option != null) { Array.Copy((Array)this.optionList[index5].Option, 0, (Array)this.frame, (int)num1, (int)this.optionList[index5].Length); } num1 += (ushort)this.optionList[index5].Length; } } this.frame[2] = (byte)Math.Floor((double)this.length / 256.0); this.frame[3] = (byte)((uint)this.length % 256U); if (this.frame.Length != (int)this.length) { Program.ShowMessage("Command字节数组编码,装配有误,请调试代码!", true); } else { if ((int)this.maxLength <= (int)byte.MaxValue) { return; } Program.ShowMessage("Command字节数组编码,装配超长,请调试代码!", true); } }
public static void AddRevFrameClass(FrameClass fClass) { lock (DataListManger.syncRoot) DataListManger.RevOList.Add(fClass); }