convert to C#
This commit is contained in:
78
Pilz.Networking/TCPManager.cs
Normal file
78
Pilz.Networking/TCPManager.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Pilz.Networking;
|
||||
|
||||
public class TCPManager : ConnectionManagerBase
|
||||
{
|
||||
private readonly TcpListener listener;
|
||||
public int BufferSize { get; set; } = 10240;
|
||||
|
||||
public TCPManager(int port) : base(port)
|
||||
{
|
||||
listener = new TcpListener(IPAddress.Any, port);
|
||||
}
|
||||
|
||||
public override void Start()
|
||||
{
|
||||
if (!IsListening)
|
||||
{
|
||||
listener.Start();
|
||||
IsListening = true;
|
||||
Task.Run(CheckRetriveData);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Stop()
|
||||
{
|
||||
if (IsListening)
|
||||
{
|
||||
IsListening = false;
|
||||
listener.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
protected override int GetBufferSize()
|
||||
{
|
||||
return BufferSize;
|
||||
}
|
||||
|
||||
private void CheckRetriveData()
|
||||
{
|
||||
while (IsListening)
|
||||
{
|
||||
if (listener.Pending())
|
||||
{
|
||||
var tcp = listener.AcceptTcpClient();
|
||||
string ip = ((IPEndPoint)tcp.Client.RemoteEndPoint).Address.ToString();
|
||||
var Stream = tcp.GetStream();
|
||||
byte[] buf = new byte[BufferSize];
|
||||
|
||||
tcp.ReceiveBufferSize = BufferSize;
|
||||
Stream.Read(buf, 0, buf.Length);
|
||||
|
||||
tcp.Close();
|
||||
|
||||
ProcessRetrivedData(ip, buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void SendData(IPEndPoint ep, byte[] buf)
|
||||
{
|
||||
var tcp = new TcpClient
|
||||
{
|
||||
SendBufferSize = BufferSize
|
||||
};
|
||||
tcp.Connect(ep);
|
||||
|
||||
var stream = tcp.GetStream();
|
||||
|
||||
// Send Data
|
||||
stream.Write(buf, 0, buf.Length);
|
||||
stream.Flush();
|
||||
|
||||
tcp.Client.Shutdown(SocketShutdown.Both);
|
||||
tcp.Close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user