SocketServer.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Net;
  2. using System.Net.Sockets;
  3. namespace QuestPDF.Previewer;
  4. internal class SocketServer
  5. {
  6. private TcpListener Listener { get; }
  7. private bool IsServerRunning { get; set; }
  8. private SocketClient Client { get; set; }
  9. public event Func<string, Task>? OnMessageReceived;
  10. public SocketServer(string ipAddress, int port)
  11. {
  12. Listener = new TcpListener(IPAddress.Parse(ipAddress), port);
  13. }
  14. public void Start()
  15. {
  16. Listener.Start();
  17. IsServerRunning = true;
  18. Task.Run(() => ListenForClients());
  19. }
  20. public void Stop()
  21. {
  22. IsServerRunning = false;
  23. Listener.Stop();
  24. }
  25. private async Task ListenForClients()
  26. {
  27. while (IsServerRunning)
  28. {
  29. var client = await Listener.AcceptTcpClientAsync();
  30. Client?.Close();
  31. Client = new SocketClient(client);
  32. Client.OnMessageReceived += async message => await OnMessageReceived.Invoke(message);
  33. Client.StartCommunication();
  34. }
  35. }
  36. public void SendMessage(string message)
  37. {
  38. Client.SendMessage(message);
  39. }
  40. }