using System.Collections.Generic; using Syntriax.Engine.Core; namespace Syntriax.Engine.Network; public interface INetworkCommunicator { Event OnConnectionEstablished { get; } Event OnConnectionAbolished { get; } IReadOnlyDictionary Connections { get; } INetworkCommunicator Stop(); INetworkCommunicator SubscribeToPackets(Event.EventHandler callback); INetworkCommunicator UnsubscribeFromPackets(Event.EventHandler callback); } public interface INetworkCommunicatorClient : INetworkCommunicator { INetworkCommunicatorClient Connect(string address, int port, string? password = null); INetworkCommunicatorClient SendToServer(T packet) where T : class, new(); } public interface INetworkCommunicatorServer : INetworkCommunicator { string Password { get; } int MaxConnectionCount { get; } int Port { get; } INetworkCommunicatorServer Start(int port, int maxConnectionCount, string? password = null); INetworkCommunicatorServer SendToClient(IConnection connection, T packet) where T : class, new(); INetworkCommunicatorServer SendToAll(T packet) where T : class, new(); }