using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace Scanner
{
public class DCUConnection
{
public Socket Sock { get; set; }
public string Message { get; set; }
public bool ConnectStatus { get; set; }
public string IpAdress { get; set; }
public DateTime LogDate { get; set; }
public Task Task { get; set; }
public DCUConnection()
{
Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ConnectStatus = false;
}
public bool Connect(IPEndPoint ip)
{
try
{
Sock.Connect(ip);
SendMessage(Command.CONNECT); //Connect, Green Led On
Message = $"{DateTime.Now} : DCU - 1 Connected, ready to scan...";
LogDate = DateTime.Now;
ConnectStatus = true;
IpAdress = ip.Address.ToString();
return ConnectStatus;
}
catch (Exception e)
{
Message = $"{DateTime.Now} : DCU - 1 Connecting failed !, {e.Message}";
ConnectStatus = false;
return ConnectStatus;
}
}
public void SendMessage(string data)
{
byte[] byteData = Encoding.ASCII.GetBytes(data);
try
{
Sock.Send(byteData);
Message = $"{DateTime.Now} : Send : {data}";
}
catch (Exception e)
{
Message = $"{DateTime.Now} : Send Command/Data to DCU - 1 failed !, {e.Message}";
}
}
public bool Disconnect()
{
try
{
SendMessage(Command.DISCONNECT);
Sock.Disconnect(false);
Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //must be initialize so it can be connect again
Message = $"{DateTime.Now} : DCU - 1 Disconnected";
LogDate = DateTime.Now;
ConnectStatus = false;
return true;
}
catch (Exception e)
{
Message = $"{DateTime.Now} : DCU - 1 Disconnecting failed !, {e.Message}";
return false;
}
}
public string Receive()
{
byte[] buffer = new byte[64];
string str = "";
try
{ // receive data with timeout 10s
str = Encoding.UTF8.GetString(ReceiveAll(Sock));
}
catch (Exception e)
{
Message = $"{DateTime.Now} : DCU - 1 Receiving data failed !, {e.Message}";
}
return str;
}
public byte[] ReceiveAll(Socket socket)
{
var buffer = new List<byte>();
var currByte = new Byte[1];
var byteCounter = 0; string str = "";
if (socket.Available > 0)
{
byteCounter = socket.Receive(currByte, currByte.Length, SocketFlags.None);
str = Encoding.UTF8.GetString(currByte);
while (str != "\r")
{
byteCounter = socket.Receive(currByte, currByte.Length, SocketFlags.None);
if (byteCounter.Equals(1))
{
buffer.Add(currByte[0]);
str = Encoding.UTF8.GetString(currByte);
}
}
}
return buffer.ToArray();
}
}
}
0 people found this article useful
0 people found this article useful