WebSocketDatabaseProxyEngine.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using InABox.Rpc;
  4. using PRSServices;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace PRSServer;
  11. internal class WebSocketDatabaseProxyEngine : DatabaseProxyEngine<WebSocketDatabaseProxyProperties>
  12. {
  13. private RpcSocketProxyServer ProxyServer;
  14. private CertificateManager CertificateManager;
  15. protected override void RunProxy()
  16. {
  17. Logger.Send(LogType.Information, "", "Starting WebSocket Listener on port " + Properties.ListenPort);
  18. CertificateManager = new CertificateManager(CertificateFileName());
  19. CertificateManager.UpdateCertificate += CertificateManager_UpdateCertificate;
  20. CertificateManager.CertificateExpiring += CertificateManager_CertificateExpiring;
  21. CertificateManager.CertificateExpired += CertificateManager_CertificateExpired;
  22. try
  23. {
  24. StartServer();
  25. }
  26. catch (Exception eListen)
  27. {
  28. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  29. }
  30. }
  31. private void StartServer()
  32. {
  33. var certificate = CertificateManager.GetCertificate();
  34. ProxyServer = new RpcSocketProxyServer(Properties.ListenPort, ServerTransport, certificate);
  35. ProxyServer.OnLog += Logger.Send;
  36. ProxyServer.Start();
  37. }
  38. private void CertificateManager_CertificateExpired()
  39. {
  40. Logger.Send(LogType.Information, "", "Expiry of certificate reached; restarting HTTPS listener...");
  41. ProxyServer.Stop();
  42. StartServer();
  43. }
  44. private void CertificateManager_CertificateExpiring(DateTime expiry)
  45. {
  46. var message = expiry.Date == DateTime.Now.Date
  47. ? $"HTTPS Certificate for Database Engine will expire today at {expiry.TimeOfDay:hh\\:mm}"
  48. : $"HTTPS Certificate for Database Engine will expire in {(expiry - DateTime.Now).Days} at {expiry:dd/MM/yyyy hh:mm}";
  49. Logger.Send(LogType.Information, "DATABASE", message);
  50. }
  51. private void CertificateManager_UpdateCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
  52. {
  53. Logger.Send(LogType.Information, "DATABASE", "HTTPS Certificate with greater expiry date found; restarting HTTPS listener...");
  54. ProxyServer.Stop();
  55. StartServer();
  56. }
  57. private string CertificateFileName() =>
  58. !string.IsNullOrWhiteSpace(Properties.CertificateFile)
  59. ? Properties.CertificateFile
  60. : CertificateEngine.CertificateFile;
  61. public override void Stop()
  62. {
  63. ProxyServer.Stop();
  64. }
  65. }