Files

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);
}
}