You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Telepathy;
|
|
using TPServer = Telepathy.Server;
|
|
using PhilExampleCrawler.Common.TCP.Utils;
|
|
using PhilExampleCrawler.Common.TCP.Packets;
|
|
|
|
namespace PhilExampleCrawler.TCPAPI
|
|
{
|
|
internal class TCPServer
|
|
{
|
|
private readonly TPServer _s = new();
|
|
|
|
private bool _running;
|
|
|
|
public event EventHandler<int>? OnUserConnected;
|
|
public event EventHandler<(int connectionID, BasePacket bp)>? OnDataReceived;
|
|
public event EventHandler<int>? OnUserDisconnected;
|
|
|
|
|
|
public void StartReceiveLoop(int port)
|
|
{
|
|
if (_running)
|
|
return;
|
|
|
|
_running = true;
|
|
|
|
_s.Start(port);
|
|
Console.WriteLine("ReceiveLoop started. Now listening for incoming messages on port " + port + "...");
|
|
|
|
Task.Run(() =>
|
|
{
|
|
while (_running)
|
|
{
|
|
while (_s.GetNextMessage(out Message msg))
|
|
switch (msg.eventType)
|
|
{
|
|
case EventType.Connected:
|
|
OnUserConnected?.Invoke(this, msg.connectionId);
|
|
break;
|
|
case EventType.Data:
|
|
OnDataReceived?.Invoke(this, (msg.connectionId, msg.data.Deserialize()));
|
|
break;
|
|
case EventType.Disconnected:
|
|
OnUserDisconnected?.Invoke(this, msg.connectionId);
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public bool Send(int connectionID, BasePacket bp)
|
|
{
|
|
return _s.Send(connectionID, bp.Serialize());
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
_running = false;
|
|
_s.Stop();
|
|
}
|
|
}
|
|
}
|