/// <summary>
        /// Configures remote execution framework.
        /// Registers all supported transport layer providers.
        /// </summary>
        public static void Configure(ILidgrenCryptoProviderResolver providerResolver)
        {
            DefaultConfig.MessageSerializer     = new BinaryMessageSerializer();
            DefaultConfig.MessageFactory        = new DefaultMessageFactory();
            DefaultConfig.RemoteExecutorFactory = new RemoteExecutorFactory();
            DefaultConfig.TaskScheduler         = new AsyncTaskScheduler();
            TransportLayerResolver.Register(new LidgrenProvider(providerResolver));

            InterfaceResolver.Singleton.RegisterInterface(typeof(IAuthenticator));
            InterfaceResolver.Singleton.RegisterInterface(typeof(ISessionEncryptedCallback));
        }
예제 #2
0
        private IServerEndpoint CreateServer(ILidgrenCryptoProviderResolver providerResolver)
        {
            DefaultConfig.MessageSerializer     = new BinaryMessageSerializer();
            DefaultConfig.MessageFactory        = new DefaultMessageFactory();
            DefaultConfig.RemoteExecutorFactory = new RemoteExecutorFactory();
            DefaultConfig.TaskScheduler         = new AsyncTaskScheduler();
            TransportLayerResolver.Register(new LidgrenProvider(providerResolver));
            _connectionListener = new LidgrenServerConnectionListener(_applicationId, _listenAddress, _port, new BinaryMessageSerializer(), providerResolver);

            _dispatcher = new OperationDispatcher();
            _dispatcher.RegisterHandler <ICalculator>(new Calculator());
            _dispatcher.RegisterHandler <IGreeter>(new Greeter());

            IServerEndpoint server = new GenericServerEndpoint(_connectionListener, new ServerConfig(), () => _dispatcher);

            server.Start();
            return(server);
        }
예제 #3
0
        /// <summary>
        /// Creates listener instance.
        /// </summary>
        /// <param name="applicationId">Application id that would be used to accept/reject incoming connections.</param>
        /// <param name="listenAddress">IP address on which listener would be listening for incoming connections. Use 0.0.0.0 to listen on all network interfaces.</param>
        /// <param name="port">Port on which listener would be listening for incoming connections.</param>
        /// <param name="serializer">Message serializer.</param>
        /// <param name="cryptoProviderResolver">Crypto provider resolver.</param>
        public LidgrenServerConnectionListener(string applicationId, string listenAddress, ushort port, IMessageSerializer serializer, ILidgrenCryptoProviderResolver cryptoProviderResolver)
        {
            _cryptoProviderResolver = cryptoProviderResolver;
            var netConfig = new NetPeerConfiguration(applicationId)
            {
                MaximumConnections = int.MaxValue,
                Port              = port,
                LocalAddress      = IPAddress.Parse(listenAddress),
                ConnectionTimeout = (float)DefaultConfig.Timeout.TotalSeconds
            };

            _serializer = serializer;
            _netServer  = new NetServer(netConfig);

            _messageRouter = new MessageRouter();
            _messageRouter.ConnectionClosed += HandleClosedConnection;
            _messageRouter.ConnectionOpened += HandleNewConnection;
            _messageRouter.DataReceived     += HandleReceivedData;

            BroadcastChannel = new LidgrenBroadcastChannel(_netServer, serializer);
        }
예제 #4
0
 private ClientConnection CreateClientConnection(ILidgrenCryptoProviderResolver provider)
 {
     return(new ClientConnection(new LidgrenClientChannel(_applicationId, _host, _port, new BinaryMessageSerializer(), provider), new OperationDispatcher(), new ConnectionConfig()));
 }
예제 #5
0
 /// <summary>
 /// Normal constructor; will use specified <see cref="ILidgrenCryptoProviderResolver"/>.
 /// </summary>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s.</param>
 /// <param name="messageSerializer">Message serializer to use.</param>
 public SharedLidgrenProvider(ILidgrenCryptoProviderResolver cryptoProviderResolver, IMessageSerializer messageSerializer)
     : base(cryptoProviderResolver, messageSerializer)
 {
 }
예제 #6
0
 /// <summary>
 /// Normal constructor; will use specified <see cref="ILidgrenCryptoProviderResolver"/>.
 /// </summary>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s</param>
 public SharedLidgrenProvider(ILidgrenCryptoProviderResolver cryptoProviderResolver)
     : base(cryptoProviderResolver)
 {
 }
 /// <summary>
 /// Normal constructor; will use specified <see cref="ILidgrenCryptoProviderResolver"/>.
 /// </summary>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s</param>
 public DurableLidgrenProvider(ILidgrenCryptoProviderResolver cryptoProviderResolver)
     : base(cryptoProviderResolver)
 {
 }
예제 #8
0
 /// <summary>
 /// Normal constructor; will use specified <see cref="ILidgrenCryptoProviderResolver"/>.
 /// </summary>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s.</param>
 /// <param name="messageSerializer">Message serializer to use.</param>
 public LidgrenProvider(ILidgrenCryptoProviderResolver cryptoProviderResolver, IMessageSerializer messageSerializer)
 {
     CryptoProviderResolver = cryptoProviderResolver;
     _serializer            = messageSerializer;
 }
예제 #9
0
 /// <summary>
 /// Normal constructor; will use specified <see cref="ILidgrenCryptoProviderResolver"/>.
 /// </summary>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s</param>
 public LidgrenProvider(ILidgrenCryptoProviderResolver cryptoProviderResolver)
     : this(cryptoProviderResolver, DefaultConfig.MessageSerializer)
 {
 }
예제 #10
0
 /// <summary>
 /// Creates channel instance with specified message serializer.
 /// </summary>
 /// <param name="serializer">Message serializer.</param>
 /// <param name="cryptoProviderResolver">Provider to map <see cref="IPEndPoint"/>s to their corresponding <see cref="NetEncryption"/>s</param>
 public LidgrenDuplexChannel(IMessageSerializer serializer, ILidgrenCryptoProviderResolver cryptoProviderResolver)
     : base(serializer)
 {
     CryptoProviderResolver = cryptoProviderResolver;
 }
예제 #11
0
 /// <summary>
 /// Creates client channel instance.
 /// </summary>
 /// <param name="applicationId">Application id that has to match to one used by <see cref="LidgrenServerConnectionListener"/>.</param>
 /// <param name="host">Host to connect to.</param>
 /// <param name="port">Port to connect to.</param>
 /// <param name="serializer">Message serializer.</param>
 /// <param name="cryptoProviderResolver">Crypto provider resolver.</param>
 public LidgrenClientChannel(string applicationId, string host, ushort port, IMessageSerializer serializer, ILidgrenCryptoProviderResolver cryptoProviderResolver)
     : base(serializer, cryptoProviderResolver)
 {
     _host   = host;
     _port   = port;
     _client =
         new NetClient(new NetPeerConfiguration(applicationId)
     {
         ConnectionTimeout = (float)DefaultConfig.Timeout.TotalSeconds
     });
     _messageRouter = new MessageRouter();
     _messageRouter.DataReceived     += HandleIncomingMessage;
     _messageRouter.ConnectionClosed += c => OnConnectionClose();
 }