Files

569 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace AGVSystem
{
// Token: 0x02000009 RID: 9
internal class AGVClientCls
{
// Token: 0x14000001 RID: 1
// (add) Token: 0x06000081 RID: 129 RVA: 0x0001073C File Offset: 0x0000E93C
// (remove) Token: 0x06000082 RID: 130 RVA: 0x00010774 File Offset: 0x0000E974
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event AGVClientCls.StartListeHandler StartListen;
// Token: 0x14000002 RID: 2
// (add) Token: 0x06000083 RID: 131 RVA: 0x000107AC File Offset: 0x0000E9AC
// (remove) Token: 0x06000084 RID: 132 RVA: 0x000107E4 File Offset: 0x0000E9E4
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event AGVClientCls.ReceiveMsgHandler OnMsgReceived;
// Token: 0x06000085 RID: 133 RVA: 0x0001081C File Offset: 0x0000EA1C
public AGVClientCls(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: 0x06000086 RID: 134 RVA: 0x00010888 File Offset: 0x0000EA88
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 = 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();
result = true;
}
else
{
result = false;
}
}
return result;
}
// Token: 0x06000087 RID: 135 RVA: 0x00010974 File Offset: 0x0000EB74
private void OnConnect(object sender, SocketAsyncEventArgs e)
{
this.connected = (e.SocketError == 0);
this.autoConnectEvent.Set();
}
// Token: 0x06000088 RID: 136 RVA: 0x00010994 File Offset: 0x0000EB94
public void Send(byte[] mes)
{
bool flag = this.connected;
if (flag)
{
EventHandler<SocketAsyncEventArgs> eventHandler = null;
SocketAsyncEventArgs senderSocketAsyncEventArgs = null;
List<SocketAsyncEventArgs> 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<SocketAsyncEventArgs> 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: 0x06000089 RID: 137 RVA: 0x00010AE8 File Offset: 0x0000ECE8
public void Listen()
{
bool flag = this.connected && this.clientSocket != null;
if (flag)
{
try
{
(this.lisnterSocketAsyncEventArgs.UserToken as Socket).ReceiveAsync(this.lisnterSocketAsyncEventArgs);
}
catch (Exception)
{
}
}
}
// Token: 0x0600008A RID: 138 RVA: 0x00010B48 File Offset: 0x0000ED48
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: 0x0600008B RID: 139 RVA: 0x00010BAC File Offset: 0x0000EDAC
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: 0x0600008C RID: 140 RVA: 0x00010C80 File Offset: 0x0000EE80
private void SimaticSocketClient_OnMsgReceived(byte[] info)
{
bool flag = info[0] > 0;
if (flag)
{
bool flag2 = this.SendOrRecv == 1;
if (flag2)
{
this.SendDataPro = info;
this.SendOrRecv = 0;
}
else
{
bool flag3 = this.SendOrRecv == 2;
if (flag3)
{
this.SendData = info;
this.SendOrRecv = 0;
}
else
{
bool flag4 = this.SendOrRecv == 3;
if (flag4)
{
this.RecvDataPro = info;
this.SendOrRecv = 0;
}
else
{
bool flag5 = this.SendOrRecv == 4;
if (flag5)
{
this.RecvData = info;
this.SendOrRecv = 0;
}
}
}
}
}
else
{
bool flag6 = this.SendOrRecv == 1;
if (flag6)
{
this.SendDataPro = new byte[1];
this.SendOrRecv = 0;
}
else
{
bool flag7 = this.SendOrRecv == 2;
if (flag7)
{
this.SendData = new byte[1];
this.SendOrRecv = 0;
}
else
{
bool flag8 = this.SendOrRecv == 3;
if (flag8)
{
this.RecvDataPro = new byte[1];
this.SendOrRecv = 0;
}
else
{
bool flag9 = this.SendOrRecv == 4;
if (flag9)
{
this.RecvData = new byte[1];
this.SendOrRecv = 0;
}
}
}
}
}
}
// Token: 0x0600008D RID: 141 RVA: 0x00010DB8 File Offset: 0x0000EFB8
public bool OpenLinkPLC()
{
this.StartListen += this.SimaticSocketClient_StartListen;
this.OnMsgReceived += this.SimaticSocketClient_OnMsgReceived;
bool flag = this.Connect();
bool flag2 = !flag;
return !flag2 || flag;
}
// Token: 0x0600008E RID: 142 RVA: 0x00010E08 File Offset: 0x0000F008
public int CloseLinkPLC()
{
return this.Disconnect();
}
// Token: 0x0600008F RID: 143 RVA: 0x00010E20 File Offset: 0x0000F020
private void SimaticSocketClient_StartListen()
{
this.Listen();
}
// Token: 0x06000090 RID: 144 RVA: 0x00010E2C File Offset: 0x0000F02C
public int WriteVM(int stationNO, int address, int value)
{
int result = -1;
byte[] array = new byte[6];
byte[] array2 = new byte[39];
array2[0] = 104;
array2[1] = 33;
array2[2] = 33;
array2[3] = 104;
array2[4] = (byte)stationNO;
array2[5] = 0;
array2[6] = 108;
array2[7] = 50;
array2[8] = 1;
array2[9] = 0;
array2[10] = 0;
array2[11] = 0;
array2[12] = 0;
array2[13] = 0;
array2[14] = 14;
array2[15] = 0;
array2[16] = 6;
array2[17] = 5;
array2[18] = 1;
array2[19] = 18;
array2[20] = 10;
array2[21] = 16;
array2[22] = 4;
array2[23] = 0;
array2[24] = 1;
array2[25] = 0;
array2[26] = 1;
array2[27] = 132;
array2[28] = 0;
array2[29] = Convert.ToByte(address * 8 / 256);
array2[30] = Convert.ToByte(address * 8 % 256);
array2[31] = 0;
array2[32] = 4;
array2[33] = 0;
array2[34] = 16;
array2[35] = Convert.ToByte(value / 256);
array2[36] = Convert.ToByte(value % 256);
int num = 0;
for (int i = 4; i <= 36; i++)
{
num += (int)array2[i];
}
array2[37] = Convert.ToByte(num % 256);
array2[38] = 22;
array[0] = 16;
array[1] = 2;
array[2] = 0;
array[3] = 92;
array[4] = 94;
array[5] = 22;
Thread.Sleep(100);
this.SendOrRecv = 1;
int num2 = 0;
this.Send(array2);
while (this.SendOrRecv != 0 && num2 < 500)
{
Thread.Sleep(1);
num2++;
}
bool flag = num2 < 500;
if (flag)
{
bool flag2 = this.SendDataPro[0] == 229;
if (flag2)
{
Thread.Sleep(100);
this.SendOrRecv = 2;
int num3 = 0;
this.Send(array);
while (this.SendOrRecv != 0 && num3 < 500)
{
Thread.Sleep(1);
num3++;
}
bool flag3 = num3 < 500;
if (flag3)
{
bool flag4 = this.SendData.Length == 24 && this.Check(this.SendData);
if (flag4)
{
result = 0;
}
return result;
}
}
}
this.SendOrRecv = 0;
return result;
}
// Token: 0x06000091 RID: 145 RVA: 0x00011094 File Offset: 0x0000F294
public int ReadVM(int stationNO, int length, int address, out int value)
{
int result = -1;
value = 0;
byte[] array = new byte[6];
byte[] array2 = new byte[33];
array2[0] = 104;
array2[1] = 27;
array2[2] = 27;
array2[3] = 104;
array2[4] = (byte)stationNO;
array2[5] = 0;
array2[6] = 108;
array2[7] = 50;
array2[8] = 1;
array2[9] = 0;
array2[10] = 0;
array2[11] = 0;
array2[12] = 0;
array2[13] = 0;
array2[14] = 14;
array2[15] = 0;
array2[16] = 0;
array2[17] = 4;
array2[18] = 1;
array2[19] = 18;
array2[20] = 10;
array2[21] = 16;
array2[22] = 4;
array2[23] = 0;
array2[24] = Convert.ToByte(length);
array2[25] = 0;
array2[26] = 1;
array2[27] = 132;
array2[28] = 0;
array2[29] = Convert.ToByte(address * 8 / 256);
array2[30] = Convert.ToByte(address * 8 % 256);
int num = 0;
for (int i = 4; i <= 30; i++)
{
num += Convert.ToInt32(array2[i]);
}
array2[31] = Convert.ToByte(num % 256);
array2[32] = 22;
array[0] = 16;
array[1] = 2;
array[2] = 0;
array[3] = 92;
array[4] = 94;
array[5] = 22;
Thread.Sleep(100);
this.SendOrRecv = 3;
int num2 = 0;
this.Send(array2);
while (this.SendOrRecv != 0 && num2 < 500)
{
Thread.Sleep(1);
num2++;
}
bool flag = num2 < 500;
if (flag)
{
bool flag2 = this.RecvDataPro[0] == 229;
if (flag2)
{
Thread.Sleep(100);
this.SendOrRecv = 4;
int num3 = 0;
this.Send(array);
while (this.SendOrRecv != 0 && num3 < 600)
{
Thread.Sleep(1);
num3++;
}
bool flag3 = num3 < 600;
if (flag3)
{
bool flag4 = this.RecvData.Length == 1;
if (flag4)
{
}
bool flag5 = this.RecvData.Length == 29;
if (flag5)
{
result = 0;
bool flag6 = this.RecvData[25] > 0;
if (flag6)
{
value = (int)this.RecvData[26] * 256 + (int)this.RecvData[25];
}
else
{
value = (int)this.RecvData[26];
}
}
else
{
bool flag7 = this.RecvData[0] == 0;
if (flag7)
{
result = -3;
}
}
return result;
}
}
else
{
bool flag8 = this.RecvDataPro[0] == 0;
if (flag8)
{
result = -3;
}
}
}
this.SendOrRecv = 0;
return result;
}
// Token: 0x06000092 RID: 146 RVA: 0x00011350 File Offset: 0x0000F550
private bool Check(byte[] by)
{
return by[0] == 104 && by[1] == 18 && by[2] == 18 && by[3] == 104 && by[4] == 0 && by[5] == 2 && by[6] == 8 && by[7] == 50 && by[8] == 3 && by[9] == 0 && by[10] == 0 && by[11] == 0 && by[12] == 0 && by[13] == 0 && by[14] == 2 && by[15] == 0 && by[16] == 1 && by[17] == 0 && by[18] == 0 && by[19] == 5 && by[20] == 1 && by[21] == byte.MaxValue && by[22] == 71 && by[23] == 22;
}
// Token: 0x06000093 RID: 147 RVA: 0x00011424 File Offset: 0x0000F624
public void Dispose()
{
bool flag = this.clientSocket.Connected;
if (flag)
{
this.clientSocket.Close();
}
}
// Token: 0x04000102 RID: 258
public string IPAdress;
// Token: 0x04000103 RID: 259
public bool connected = false;
// Token: 0x04000104 RID: 260
public Socket clientSocket;
// Token: 0x04000105 RID: 261
private IPEndPoint hostEndPoint;
// Token: 0x04000106 RID: 262
private byte[] SendDataPro;
// Token: 0x04000107 RID: 263
private byte[] RecvDataPro;
// Token: 0x04000108 RID: 264
private byte[] SendData;
// Token: 0x04000109 RID: 265
private byte[] RecvData;
// Token: 0x0400010A RID: 266
private byte SendOrRecv;
// Token: 0x0400010B RID: 267
private AutoResetEvent autoConnectEvent = new AutoResetEvent(false);
// Token: 0x0400010C RID: 268
private SocketAsyncEventArgs lisnterSocketAsyncEventArgs;
// Token: 0x0400010F RID: 271
private List<SocketAsyncEventArgs> s_lst = new List<SocketAsyncEventArgs>();
// Token: 0x0200003B RID: 59
// (Invoke) Token: 0x060002D9 RID: 729
public delegate void StartListeHandler();
// Token: 0x0200003C RID: 60
// (Invoke) Token: 0x060002DD RID: 733
public delegate void ReceiveMsgHandler(byte[] info);
}
}