12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System.Reflection;
- using H.Pipes.Args;
- using InABox.API;
- using InABox.Clients;
- using InABox.Core;
- using InABox.IPC;
- namespace InABox.Rpc
- {
- public class RpcServer<TTransport> : IDisposable, IRpcServer where TTransport : IRpcServerTransport
- {
- private TTransport _transport;
- public event LogEvent? OnLog;
-
- public bool IsSecure() => _transport?.IsSecure() ?? false;
- public RpcServer(TTransport transport)
- {
- _transport = transport;
- _transport.OnOpen += Transport_OnOpen;
- _transport.OnClose += Transport_OnClose;
- _transport.OnException += Transport_OnException;
- _transport.BeforeMessage += Transport_BeforeMessage;
- _transport.AfterMessage += Transport_AfterMessage;
- _transport.AddHandler(new RpcPingHandler(this));
- _transport.AddHandler(new RpcInfoHandler(this));
- _transport.AddHandler(new RpcValidateHandler(this));
- _transport.AddHandler(new RpcCheck2FAHandler(this));
- _transport.AddHandler(new RpcQueryHandler(this));
- _transport.AddHandler(new RpcSaveHandler(this));
- _transport.AddHandler(new RpcDeleteHandler(this));
- _transport.AddHandler(new RpcVersionHandler(this));
- _transport.AddHandler(new RpcInstallerHandler(this));
- _transport.AddHandler(new RpcReleaseNotesHandler(this));
- }
- private void Transport_OnOpen(IRpcTransport transport, RpcTransportOpenArgs e)
- {
- if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
- OnLog?.Invoke(LogType.Information, "", $"Client Connected [{e.Session?.ID}]", Guid.Empty);
- }
- private void Transport_OnClose(IRpcTransport transport, RpcTransportCloseArgs e)
- {
- if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
- OnLog?.Invoke(LogType.Information, "", $"Client Disconnected({e.Type}) [{e.Session?.ID}]", Guid.Empty);
- }
- private void Transport_BeforeMessage(IRpcTransport transport, RpcTransportMessageArgs e)
- {
- //OnLog?.Invoke(LogType.Information, "", $"Request Received [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
- }
- private void Transport_AfterMessage(IRpcTransport transport, RpcTransportMessageArgs e)
- {
- //OnLog?.Invoke(LogType.Information, "", $"Sending Response [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
- }
- private void Transport_OnException(IRpcTransport transport, RpcTransportExceptionArgs e)
- {
- if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
- OnLog?.Invoke(LogType.Error, $"", $"Exception Occurred in {e.Session?.ID}: {e.Exception.Message}", Guid.Empty);
- }
- public void Start()
- {
- _transport.Start();
- }
- public void Stop()
- {
- _transport.Stop();
- }
-
- public void Dispose()
- {
- _transport?.Stop();
- }
- ~RpcServer()
- {
- Dispose();
- }
- }
- }
|