using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Net; using System.Net.Sockets; using System.Threading; namespace AGVSystem.Cls { // Token: 0x02000026 RID: 38 internal class Cls_Mc_Mitsubishi { // Token: 0x14000005 RID: 5 // (add) Token: 0x06000229 RID: 553 RVA: 0x0004FB00 File Offset: 0x0004DD00 // (remove) Token: 0x0600022A RID: 554 RVA: 0x0004FB38 File Offset: 0x0004DD38 [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event Cls_Mc_Mitsubishi.ReceiveMsgHandler OnMsgReceived; // Token: 0x14000006 RID: 6 // (add) Token: 0x0600022B RID: 555 RVA: 0x0004FB70 File Offset: 0x0004DD70 // (remove) Token: 0x0600022C RID: 556 RVA: 0x0004FBA8 File Offset: 0x0004DDA8 [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event Cls_Mc_Mitsubishi.StartListenHandler StartListenThread; // Token: 0x14000007 RID: 7 // (add) Token: 0x0600022D RID: 557 RVA: 0x0004FBE0 File Offset: 0x0004DDE0 // (remove) Token: 0x0600022E RID: 558 RVA: 0x0004FC18 File Offset: 0x0004DE18 [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event Cls_Mc_Mitsubishi.SendCompleted OnSended; // Token: 0x0600022F RID: 559 RVA: 0x0004FC50 File Offset: 0x0004DE50 public Cls_Mc_Mitsubishi(string hostName, int port, int PLCStaion) { this.Plcport = PLCStaion; 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: 0x06000230 RID: 560 RVA: 0x0004FCAC File Offset: 0x0004DEAC private bool Connect() { bool result; using (SocketAsyncEventArgs socketAsyncEventArgs = new SocketAsyncEventArgs()) { socketAsyncEventArgs.UserToken = this.clientSocket; socketAsyncEventArgs.RemoteEndPoint = this.hostEndPoint; socketAsyncEventArgs.Completed += this.OnConnect; this.clientSocket.ConnectAsync(socketAsyncEventArgs); bool flag = Cls_Mc_Mitsubishi.autoConnectEvent.WaitOne(1000); bool flag2 = flag; if (flag2) { this.listenerSocketAsyncEventArgs = new SocketAsyncEventArgs(); byte[] array = new byte[255]; this.listenerSocketAsyncEventArgs.UserToken = this.clientSocket; this.listenerSocketAsyncEventArgs.SetBuffer(array, 0, array.Length); this.listenerSocketAsyncEventArgs.Completed += this.OnReceive; this.StartListenThread(); this.clientSocket.SetKeepAlive(3000UL, 1000UL); result = true; } else { result = false; } } return result; } // Token: 0x06000231 RID: 561 RVA: 0x0004FDB0 File Offset: 0x0004DFB0 private void Listen() { (this.listenerSocketAsyncEventArgs.UserToken as Socket).ReceiveAsync(this.listenerSocketAsyncEventArgs); } // Token: 0x06000232 RID: 562 RVA: 0x0004FDD0 File Offset: 0x0004DFD0 private void Send(byte[] message) { bool flag = this.connected; if (flag) { SocketAsyncEventArgs senderSocketAsyncEventArgs = null; List obj = Cls_Mc_Mitsubishi.s_lst; lock (obj) { bool flag3 = Cls_Mc_Mitsubishi.s_lst.Count > 0; if (flag3) { senderSocketAsyncEventArgs = Cls_Mc_Mitsubishi.s_lst[Cls_Mc_Mitsubishi.s_lst.Count - 1]; Cls_Mc_Mitsubishi.s_lst.RemoveAt(Cls_Mc_Mitsubishi.s_lst.Count - 1); } } bool flag4 = senderSocketAsyncEventArgs == null; if (flag4) { senderSocketAsyncEventArgs = new SocketAsyncEventArgs(); senderSocketAsyncEventArgs.UserToken = this.clientSocket; senderSocketAsyncEventArgs.RemoteEndPoint = this.hostEndPoint; senderSocketAsyncEventArgs.Completed += delegate(object sender, SocketAsyncEventArgs _e) { List obj2 = Cls_Mc_Mitsubishi.s_lst; lock (obj2) { Cls_Mc_Mitsubishi.s_lst.Add(senderSocketAsyncEventArgs); } }; } senderSocketAsyncEventArgs.SetBuffer(message, 0, message.Length); this.clientSocket.SendAsync(senderSocketAsyncEventArgs); } else { this.connected = false; } this.SendMess = message; } // Token: 0x06000233 RID: 563 RVA: 0x0004FF04 File Offset: 0x0004E104 private bool Disconnect() { bool result = true; try { this.clientSocket.Shutdown(SocketShutdown.Both); this.clientSocket.Close(); } catch (Exception) { result = false; } return result; } // Token: 0x06000234 RID: 564 RVA: 0x0004FF50 File Offset: 0x0004E150 private void OnConnect(object sender, SocketAsyncEventArgs e) { Cls_Mc_Mitsubishi.autoConnectEvent.Set(); this.connected = (e.SocketError == 0); } // Token: 0x06000235 RID: 565 RVA: 0x0004FF70 File Offset: 0x0004E170 private void OnReceive(object sender, SocketAsyncEventArgs e) { bool flag = e.BytesTransferred == 0; if (flag) { bool flag2 = this.clientSocket.Connected; if (flag2) { try { this.clientSocket.Shutdown(SocketShutdown.Both); } catch (Exception) { } finally { bool flag3 = this.clientSocket.Connected; if (flag3) { this.clientSocket.Close(); } } } byte[] info = new byte[] { 0 }; this.OnMsgReceived(info); this.connected = false; } else { byte[] buffer = e.Buffer; this.OnMsgReceived(buffer); this.Listen(); } } // Token: 0x06000236 RID: 566 RVA: 0x00050034 File Offset: 0x0004E234 private void OnSend(object sender, SocketAsyncEventArgs e) { bool flag = e.SocketError == 0; if (flag) { this.OnSended(true); } else { this.OnSended(false); this.ProcessError(e); } } // Token: 0x06000237 RID: 567 RVA: 0x00050078 File Offset: 0x0004E278 private void ProcessError(SocketAsyncEventArgs e) { Socket socket = e.UserToken as Socket; bool flag = socket.Connected; if (flag) { try { socket.Shutdown(SocketShutdown.Both); } catch (Exception) { } finally { bool flag2 = socket.Connected; if (flag2) { socket.Close(); } } this.connected = false; } } // Token: 0x06000238 RID: 568 RVA: 0x000500EC File Offset: 0x0004E2EC public void Dispose() { Cls_Mc_Mitsubishi.autoConnectEvent.Close(); bool flag = this.clientSocket.Connected; if (flag) { this.clientSocket.Close(); } } // Token: 0x06000239 RID: 569 RVA: 0x00050124 File Offset: 0x0004E324 private void OmronFINS_OnSended(bool successorfalse) { bool flag = !successorfalse; if (flag) { } } // Token: 0x0600023A RID: 570 RVA: 0x00050140 File Offset: 0x0004E340 private void OmronFINS_OnMsgReceived(byte[] info) { bool sendmessHas = this.SendmessHas; if (sendmessHas) { bool flag = info[0] > 0; if (flag) { bool flag2 = info.Length > 24; if (flag2) { string str = ""; for (int i = 0; i < 24; i++) { str += info[i].ToString("X").PadLeft(2, '0'); } bool flag3 = int.Parse(info[23].ToString("X").Trim(), NumberStyles.HexNumber) == this.Plcport; if (flag3) { this.PCS = info[19]; this.PLCS = info[23]; this.SendmessHas = false; } } } } else { bool flag4 = info[0] > 0; if (flag4) { bool flag5 = this.SendOrRev2 == 1; if (flag5) { this.SendBack = info; this.SendOrRev2 = 0; } else { bool flag6 = this.SendOrRev == 2; if (flag6) { this.RecvBack = info; this.SendOrRev = 0; } } } else { bool flag7 = this.SendOrRev2 == 1; if (flag7) { this.SendBack = new byte[1]; this.SendBack[0] = 0; this.SendOrRev2 = 0; } else { bool flag8 = this.SendOrRev == 2; if (flag8) { this.RecvBack = new byte[1]; this.RecvBack[0] = 0; this.SendOrRev = 0; } } } } } // Token: 0x0600023B RID: 571 RVA: 0x000502BD File Offset: 0x0004E4BD private void OmronFINS_StartListenThread() { this.Listen(); } // Token: 0x0600023C RID: 572 RVA: 0x000502C8 File Offset: 0x0004E4C8 public bool OpenLinkPLC() { this.StartListenThread += this.OmronFINS_StartListenThread; this.OnMsgReceived += this.OmronFINS_OnMsgReceived; this.OnSended += this.OmronFINS_OnSended; return this.Connect(); } // Token: 0x0600023D RID: 573 RVA: 0x00050320 File Offset: 0x0004E520 public bool CloseLinkPLC() { return this.Disconnect(); } // Token: 0x0600023E RID: 574 RVA: 0x00050338 File Offset: 0x0004E538 public bool WritePlcData(int address, int value) { byte[] message = new byte[] { 80, 0, 0, byte.MaxValue, byte.MaxValue, 3, 0, 14, 0, 0, 0, 1, 20, 0, 0, Convert.ToByte(address % 256), Convert.ToByte(address / 256), 0, 168, 1, 0, Convert.ToByte(value % 256), Convert.ToByte(value / 256) }; bool result = false; this.SendOrRev2 = 1; this.Send(message); int num = 0; while (this.SendOrRev2 != 0 & this.connected & num < 1000) { Thread.Sleep(1); num++; } bool flag = num < 1000; if (flag) { try { bool flag2 = this.SendBack[0] == 208 && this.SendBack[5] == 3 && this.SendBack[7] == 2 && this.SendBack[10] == 0; result = flag2; } catch (Exception) { } } else { this.SendOrRev2 = 0; } return result; } // Token: 0x0600023F RID: 575 RVA: 0x000504B4 File Offset: 0x0004E6B4 public bool ReadPlcData(int address, int length, out int[] IntValue) { bool result = false; IntValue = new int[length]; this.Send(new byte[] { 80, 0, 0, byte.MaxValue, byte.MaxValue, 3, 0, 12, 0, 0, 0, 1, 4, 0, 0, Convert.ToByte(address % 256), Convert.ToByte(address / 256), 0, 168, Convert.ToByte(length % 256), Convert.ToByte(length / 256) }); this.SendOrRev = 2; int num = 0; while (this.SendOrRev != 0 & this.connected & num < 1000) { Thread.Sleep(1); num++; } bool flag = num < 1000; if (flag) { try { bool flag2 = this.RecvBack[0] == 208 && this.RecvBack[5] == 3 && this.RecvBack[7] == 22 && this.RecvBack[10] == 0; if (flag2) { result = true; for (int i = 0; i < 10; i++) { IntValue[i] = (int)this.RecvBack[11 + 2 * i] + (int)this.RecvBack[12 + 2 * i] * 256; } } else { result = false; } } catch (Exception) { } } else { this.SendOrRev = 0; } return result; } // Token: 0x040005F5 RID: 1525 public Socket clientSocket; // Token: 0x040005F6 RID: 1526 public bool connected = false; // Token: 0x040005F7 RID: 1527 private byte[] SendMess; // Token: 0x040005F8 RID: 1528 private IPEndPoint hostEndPoint; // Token: 0x040005F9 RID: 1529 private static AutoResetEvent autoConnectEvent = new AutoResetEvent(false); // Token: 0x040005FD RID: 1533 private SocketAsyncEventArgs listenerSocketAsyncEventArgs; // Token: 0x040005FE RID: 1534 private int Plcport; // Token: 0x040005FF RID: 1535 public static List s_lst = new List(); // Token: 0x04000600 RID: 1536 private byte PCS; // Token: 0x04000601 RID: 1537 private byte PLCS; // Token: 0x04000602 RID: 1538 private int SendOrRev; // Token: 0x04000603 RID: 1539 private int SendOrRev2; // Token: 0x04000604 RID: 1540 private byte[] SendBack; // Token: 0x04000605 RID: 1541 private byte[] RecvBack; // Token: 0x04000606 RID: 1542 private bool SendmessHas = false; // Token: 0x02000041 RID: 65 // (Invoke) Token: 0x060002ED RID: 749 public delegate void ReceiveMsgHandler(byte[] info); // Token: 0x02000042 RID: 66 // (Invoke) Token: 0x060002F1 RID: 753 public delegate void StartListenHandler(); // Token: 0x02000043 RID: 67 // (Invoke) Token: 0x060002F5 RID: 757 public delegate void SendCompleted(bool successorfalse); } }