526 lines
12 KiB
C#
526 lines
12 KiB
C#
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<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: 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<SocketAsyncEventArgs> s_lst = new List<SocketAsyncEventArgs>();
|
|
|
|
// 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);
|
|
}
|
|
}
|