using System; using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Net.Sockets; using System.Threading; namespace AGVSystem { // Token: 0x0200000C RID: 12 public class Soc_Client { // Token: 0x14000003 RID: 3 // (add) Token: 0x060000A5 RID: 165 RVA: 0x00011F9C File Offset: 0x0001019C // (remove) Token: 0x060000A6 RID: 166 RVA: 0x00011FD4 File Offset: 0x000101D4 [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event Soc_Client.StartListeHandler StartListen; // Token: 0x14000004 RID: 4 // (add) Token: 0x060000A7 RID: 167 RVA: 0x0001200C File Offset: 0x0001020C // (remove) Token: 0x060000A8 RID: 168 RVA: 0x00012044 File Offset: 0x00010244 [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event Soc_Client.ReceiveMsgHandler OnMsgReceived; // Token: 0x060000A9 RID: 169 RVA: 0x0001207C File Offset: 0x0001027C public Soc_Client(string hostName, int port) { this.IPAdress = hostName; IPAddress[] hostAddresses = Dns.GetHostAddresses(hostName); this.hostEndPoint = new IPEndPoint(hostAddresses[hostAddresses.Length - 1], port); this.clientSocket = new Socket(this.hostEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); } // Token: 0x060000AA RID: 170 RVA: 0x00012114 File Offset: 0x00010314 private bool Connect() { bool result; using (SocketAsyncEventArgs socketAsyncEventArgs = new SocketAsyncEventArgs()) { try { socketAsyncEventArgs.UserToken = this.clientSocket; socketAsyncEventArgs.RemoteEndPoint = this.hostEndPoint; socketAsyncEventArgs.Completed += this.OnConnect; this.clientSocket.ConnectAsync(socketAsyncEventArgs); bool flag = this.autoConnectEvent.WaitOne(1000); bool flag2 = this.connected; if (flag2) { this.lisnterSocketAsyncEventArgs = new SocketAsyncEventArgs(); byte[] array = new byte[50]; this.lisnterSocketAsyncEventArgs.UserToken = this.clientSocket; this.lisnterSocketAsyncEventArgs.SetBuffer(array, 0, array.Length); this.lisnterSocketAsyncEventArgs.Completed += this.OnReceive; this.StartListen(); return true; } } catch { } result = false; } return result; } // Token: 0x060000AB RID: 171 RVA: 0x00012218 File Offset: 0x00010418 private void OnConnect(object sender, SocketAsyncEventArgs e) { this.connected = (e.SocketError == 0); this.autoConnectEvent.Set(); } // Token: 0x060000AC RID: 172 RVA: 0x00012238 File Offset: 0x00010438 public void Send(byte[] mes) { bool flag = this.connected; if (flag) { EventHandler eventHandler = null; SocketAsyncEventArgs senderSocketAsyncEventArgs = null; List obj = this.s_lst; lock (obj) { bool flag3 = this.s_lst.Count > 0; if (flag3) { senderSocketAsyncEventArgs = this.s_lst[this.s_lst.Count - 1]; this.s_lst.RemoveAt(this.s_lst.Count - 1); } } bool flag4 = senderSocketAsyncEventArgs == null; if (flag4) { senderSocketAsyncEventArgs = new SocketAsyncEventArgs(); senderSocketAsyncEventArgs.UserToken = this.clientSocket; senderSocketAsyncEventArgs.RemoteEndPoint = this.clientSocket.RemoteEndPoint; bool flag5 = eventHandler == null; if (flag5) { eventHandler = delegate(object sender, SocketAsyncEventArgs _e) { List obj2 = this.s_lst; lock (obj2) { this.s_lst.Add(senderSocketAsyncEventArgs); } }; } senderSocketAsyncEventArgs.Completed += eventHandler; } senderSocketAsyncEventArgs.SetBuffer(mes, 0, mes.Length); this.clientSocket.SendAsync(senderSocketAsyncEventArgs); } else { this.connected = false; } } // Token: 0x060000AD RID: 173 RVA: 0x0001238C File Offset: 0x0001058C public void Listen() { bool flag = this.connected && this.clientSocket != null; if (flag) { try { (this.lisnterSocketAsyncEventArgs.UserToken as Socket).ReceiveAsync(this.lisnterSocketAsyncEventArgs); } catch (Exception) { } } } // Token: 0x060000AE RID: 174 RVA: 0x000123EC File Offset: 0x000105EC private int Disconnect() { int result = 0; try { this.clientSocket.Shutdown(SocketShutdown.Both); } catch (Exception) { } try { this.clientSocket.Close(); } catch (Exception) { } this.connected = false; return result; } // Token: 0x060000AF RID: 175 RVA: 0x00012450 File Offset: 0x00010650 private void OnReceive(object sender, SocketAsyncEventArgs e) { bool flag = e.BytesTransferred == 0; if (flag) { try { this.clientSocket.Shutdown(SocketShutdown.Both); } catch (Exception) { } finally { bool flag2 = this.clientSocket.Connected; if (flag2) { this.clientSocket.Close(); } } byte[] info = new byte[1]; this.OnMsgReceived(info); } else { byte[] array = new byte[e.BytesTransferred]; for (int i = 0; i < e.BytesTransferred; i++) { array[i] = e.Buffer[i]; } this.OnMsgReceived(array); this.Listen(); } } // Token: 0x060000B0 RID: 176 RVA: 0x00012524 File Offset: 0x00010724 private void SimaticSocketClient_OnMsgReceived(byte[] info) { bool flag = info[0] > 0; if (flag) { byte b = 0; while ((int)b < info.Length) { bool flag2 = this.Offset < 24; if (flag2) { this.RecvData_Temp[this.Offset] = info[(int)b]; this.Offset++; } b += 1; } } else { for (byte b2 = 0; b2 < 24; b2 += 1) { this.RecvData_Temp[(int)b2] = 0; } this.Offset = 0; } } // Token: 0x060000B1 RID: 177 RVA: 0x000125B0 File Offset: 0x000107B0 public bool OpenLinkPLC() { this.StartListen += this.SimaticSocketClient_StartListen; this.OnMsgReceived += this.SimaticSocketClient_OnMsgReceived; bool flag = this.Connect(); bool flag2 = !flag; return !flag2 || flag; } // Token: 0x060000B2 RID: 178 RVA: 0x00012600 File Offset: 0x00010800 public int CloseLinkPLC() { return this.Disconnect(); } // Token: 0x060000B3 RID: 179 RVA: 0x00012618 File Offset: 0x00010818 private void SimaticSocketClient_StartListen() { this.Listen(); } // Token: 0x060000B4 RID: 180 RVA: 0x00012624 File Offset: 0x00010824 public int WriteInfo(int value_fx, int value_mb, int value_control) { object obj = this.write_obj; int result; lock (obj) { int num = -1; byte[] array = new byte[] { 243, 1, Convert.ToByte(value_fx), 0, Convert.ToByte(value_mb % 256), Convert.ToByte(value_mb / 256), 0, 0, Convert.ToByte(value_control), 0, 0, 0, 0, 0, 207 }; array[13] = this.FCS(array)[0]; int num2 = 0; this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[22] = 0; this.RecvData_Temp[23] = 0; this.Send(array); while ((this.RecvData_Temp[0] == 0 || this.RecvData_Temp[23] == 0) && num2 < 350) { Thread.Sleep(2); num2++; } bool flag2 = num2 < 350; if (flag2) { bool flag3 = this.RecvData_Temp[0] == 243 && this.RecvData_Temp[1] == 2 && this.RecvData_Temp[23] == 207; if (flag3) { num = 0; } } this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[22] = 0; this.RecvData_Temp[23] = 0; result = num; } return result; } // Token: 0x060000B5 RID: 181 RVA: 0x000127DC File Offset: 0x000109DC public int WriteInfo(int value_mb, int isDrop, out byte[] results) { object obj = this.write_obj; int result; lock (obj) { int num = -1; byte[] array = new byte[] { 243, 1, 1, 0, Convert.ToByte(value_mb % 256), Convert.ToByte(value_mb / 256), 0, 0, 0, Convert.ToByte(isDrop), 0, 0, 0, 0, 207 }; array[13] = this.FCS(array)[0]; results = new byte[24]; for (byte b = 0; b < 24; b += 1) { results[(int)b] = 0; } int num2 = 0; this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[22] = 0; this.RecvData_Temp[23] = 0; this.Send(array); while ((this.RecvData_Temp[0] == 0 || this.RecvData_Temp[23] == 0) && num2 < 350) { Thread.Sleep(2); num2++; } bool flag2 = num2 < 350; if (flag2) { bool flag3 = this.RecvData_Temp[0] == 243 && this.RecvData_Temp[1] == 2 && this.RecvData_Temp[23] == 207; if (flag3) { num = 0; for (byte b2 = 0; b2 < 23; b2 += 1) { results[(int)b2] = this.RecvData_Temp[(int)b2]; } } } this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[22] = 0; this.RecvData_Temp[23] = 0; result = num; } return result; } // Token: 0x060000B6 RID: 182 RVA: 0x000129DC File Offset: 0x00010BDC private byte[] FCS(byte[] b) { int num = 0; byte[] array = new byte[2]; for (int i = 0; i < b.Length - 1; i++) { num += (int)b[i]; } string hexString = num.ToString("X2").Substring(num.ToString("X2").Length - 2, 2); return Soc_Client.strToToHexByte(hexString); } // Token: 0x060000B7 RID: 183 RVA: 0x00012A48 File Offset: 0x00010C48 private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); bool flag = hexString.Length % 2 != 0; if (flag) { hexString += " "; } byte[] array = new byte[hexString.Length / 2]; for (int i = 0; i < array.Length; i++) { array[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); } return array; } // Token: 0x060000B8 RID: 184 RVA: 0x00012AC0 File Offset: 0x00010CC0 public int ReadInfo(out int[] results) { object obj = this.read_obj; int result; lock (obj) { int num = -1; byte[] array = new byte[15]; results = new int[24]; byte b = 0; while ((int)b < results.Length) { results[(int)b] = 0; b += 1; } array[0] = 243; array[1] = 10; array[2] = 0; array[3] = 0; array[4] = 0; array[5] = 0; array[6] = 0; array[7] = 0; array[8] = 0; array[9] = 0; array[10] = 0; array[11] = 0; array[12] = 0; array[13] = 0; array[14] = 207; array[13] = this.FCS(array)[0]; int num2 = 0; this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[23] = 0; this.Send(array); while ((this.RecvData_Temp[0] == 0 || this.RecvData_Temp[23] == 0) && num2 < 350) { Thread.Sleep(2); num2++; } bool flag2 = num2 < 350; if (flag2) { bool flag3 = this.RecvData_Temp[0] == 243 && this.RecvData_Temp[1] == 11 && this.RecvData_Temp[23] == 207; if (flag3) { num = 0; for (byte b2 = 0; b2 < 23; b2 += 1) { results[(int)b2] = (int)this.RecvData_Temp[(int)b2]; } } else { bool flag4 = this.RecvData_Temp[23] == 0; if (flag4) { num = -3; } } } this.Offset = 0; this.RecvData_Temp[0] = 0; this.RecvData_Temp[1] = 0; this.RecvData_Temp[22] = 0; this.RecvData_Temp[23] = 0; result = num; } return result; } // Token: 0x060000B9 RID: 185 RVA: 0x00012CBC File Offset: 0x00010EBC public void Dispose() { bool flag = this.clientSocket.Connected; if (flag) { this.clientSocket.Close(); } } // Token: 0x04000117 RID: 279 public string IPAdress; // Token: 0x04000118 RID: 280 public bool connected = false; // Token: 0x04000119 RID: 281 public Socket clientSocket; // Token: 0x0400011A RID: 282 private IPEndPoint hostEndPoint; // Token: 0x0400011B RID: 283 private AutoResetEvent autoConnectEvent = new AutoResetEvent(false); // Token: 0x0400011C RID: 284 private SocketAsyncEventArgs lisnterSocketAsyncEventArgs; // Token: 0x0400011F RID: 287 private List s_lst = new List(); // Token: 0x04000120 RID: 288 private object write_obj = new object(); // Token: 0x04000121 RID: 289 private int Offset = 0; // Token: 0x04000122 RID: 290 private byte[] RecvData_Temp = new byte[24]; // Token: 0x04000123 RID: 291 private object read_obj = new object(); // Token: 0x0200003E RID: 62 // (Invoke) Token: 0x060002E3 RID: 739 public delegate void StartListeHandler(); // Token: 0x0200003F RID: 63 // (Invoke) Token: 0x060002E7 RID: 743 public delegate void ReceiveMsgHandler(byte[] info); } }