Ejemplo n.º 1
0
        public ServerPacketProcessor(ServerBuilderOptions options,
                                     ILogger <ServerPacketProcessor> logger,
                                     IPacketHandlers packetHandlers,
                                     IServerInformation serverInformation,
                                     IPacketSerialiser packetSerialiser,
                                     IEnumerable <IMiddlewareHandler> middlewares)
        {
            this.logger            = logger;
            this.packetHandlers    = packetHandlers;
            this.serverInformation = serverInformation;
            this.packetSerialiser  = packetSerialiser;
            this.middlewares       = middlewares.ToList();

            tcpSenderObjectPool = new ObjectPool <ISender>(options.TcpMaxConnections);

            for (var i = 0; i < tcpSenderObjectPool.Capacity; i++)
            {
                tcpSenderObjectPool.Push(new TcpSender(packetSerialiser));
            }

            udpSenderObjectPool = new ObjectPool <ISender>(options.TcpMaxConnections * 2);

            for (var i = 0; i < udpSenderObjectPool.Capacity; i++)
            {
                udpSenderObjectPool.Push(new UdpSender(_socketSender));
            }

            packetContextObjectPool = new ObjectPool <IPacketContext>(options.TcpMaxConnections * 2);

            for (var i = 0; i < packetContextObjectPool.Capacity; i++)
            {
                packetContextObjectPool.Push(new PacketContext());
            }
        }
Ejemplo n.º 2
0
        public ServerPacketProcessor(ServerBuilderOptions options,
                                     ILogger <ServerPacketProcessor> logger,
                                     IPacketHandlers packetHandlers,
                                     IServerInformation serverInformation,
                                     IPacketSerialiser packetSerialiser)
        {
            this.logger            = logger;
            this.packetHandlers    = packetHandlers;
            this.serverInformation = serverInformation;
            this.packetSerialiser  = packetSerialiser;

            tcpSenderObjectPool = new ObjectPool <ISender>(options.TcpMaxConnections);

            for (var i = 0; i < tcpSenderObjectPool.Capacity; i++)
            {
                tcpSenderObjectPool.Push(new TcpSender(packetSerialiser));
            }

            udpSenderObjectPool = new ObjectPool <ISender>(options.TcpMaxConnections * 2);

            for (var i = 0; i < udpSenderObjectPool.Capacity; i++)
            {
                udpSenderObjectPool.Push(new UdpSender(packetSerialiser));
            }
        }
Ejemplo n.º 3
0
 public ServerBuilder()
 {
     this.options           = new ServerBuilderOptions();
     this.serviceCollection = new ServiceCollection();
     this.modules           = new List <IPacketHandlerModule>();
     this.module            = new PacketHandlerModule();
     this.modules.Add(this.module);
 }
Ejemplo n.º 4
0
        public Server(ServerBuilderOptions options,
                      ILogger logger,
                      IServiceProvider serviceProvider,
                      IPacketHandlers packetHandlers,
                      ITcpConnections tcpConnections,
                      IServerPacketProcessor serverPacketProcessor,
                      ITcpSocketListenerFactory tcpSocketListenerFactory,
                      IUdpSocketListenerFactory udpSocketListenerFactory,
                      IBufferManager bufferManager,
                      IServerInformation serverInformation,
                      IPacketSerialiser packetSerialiser)
        {
            this.tcpConnections    = tcpConnections;
            this.serverInformation = serverInformation;
            this.packetSerialiser  = packetSerialiser;
            bufferManager.InitBuffer();

            if (options.TcpPort > 0)
            {
                this.TcpListener = tcpSocketListenerFactory.Create();
            }

            if (options.UdpPort > 0)
            {
                this.UdpListener = udpSocketListenerFactory.Create();
            }

            Task.Factory.StartNew(() =>
            {
                while (this.serverInformation.IsRunning)
                {
                    if (this.eventArgs == null)
                    {
                        this.eventArgs = new ServerInformationEventArgs();
                    }

                    this.eventArgs.ProcessedTcpPackets =
                        serverInformation.ProcessedTcpPackets;
                    this.eventArgs.InvalidTcpPackets =
                        serverInformation.InvalidTcpPackets;
                    this.eventArgs.ProcessedUdpPackets =
                        serverInformation.ProcessedUdpPackets;
                    this.eventArgs.InvalidUdpPackets =
                        serverInformation.InvalidUdpPackets;
                    this.eventArgs.TcpConnections = tcpConnections.GetConnections()
                                                    .Count;

                    this.ServerInformationUpdated?.Invoke(this, this.eventArgs);

                    this.serverInformation.ProcessedTcpPackets = 0;
                    this.serverInformation.InvalidTcpPackets   = 0;
                    this.serverInformation.ProcessedUdpPackets = 0;
                    this.serverInformation.InvalidUdpPackets   = 0;

                    Thread.Sleep(10000);
                }
            });
        }
 public DefaultUdpSocketListenerFactory(ServerBuilderOptions options,
                                        ILogger <UdpClientListener> logger,
                                        IServerPacketProcessor serverPacketProcessor,
                                        IServerInformation serverInformation)
 {
     this.options = options;
     this.logger  = logger;
     this.serverPacketProcessor = serverPacketProcessor;
     this.serverInformation     = serverInformation;
 }
Ejemplo n.º 6
0
        public TcpConnections(ServerBuilderOptions options)
        {
            this.objectPool = new ObjectPool <ITcpConnection>(options.TcpMaxConnections);

            for (var i = 0; i < this.objectPool.Capacity; i++)
            {
                this.objectPool.Push(new TcpConnection(null));
            }

            this.connections = new List <ITcpConnection>();
        }
Ejemplo n.º 7
0
 public UdpSocketListener(ServerBuilderOptions options,
                          ILogger <UdpSocketListener> logger,
                          IServerPacketProcessor serverPacketProcessor,
                          IBufferManager bufferManager)
 {
     this.options = options;
     this.logger  = logger;
     this.serverPacketProcessor = serverPacketProcessor;
     this.bufferManager         = bufferManager;
     this.socketEventArgsPool   = new ObjectPool <SocketAsyncEventArgs>(options.UdpSocketObjectPoolSize);
 }
 public DefaultTcpSocketListenerFactory(IServerPacketProcessor serverPacketProcessor,
                                        IBufferManager bufferManager,
                                        ILogger logger,
                                        ITcpConnections connections,
                                        ServerBuilderOptions options)
 {
     this.serverPacketProcessor = serverPacketProcessor;
     this.bufferManager         = bufferManager;
     this.logger      = logger;
     this.connections = connections;
     this.options     = options;
 }
 public DefaultUdpSocketListenerFactory(ServerBuilderOptions options,
                                        ILogger logger,
                                        IServerPacketProcessor serverPacketProcessor,
                                        IBufferManager bufferManager,
                                        IServerInformation serverInformation)
 {
     this.options = options;
     this.logger  = logger;
     this.serverPacketProcessor = serverPacketProcessor;
     this.bufferManager         = bufferManager;
     this.serverInformation     = serverInformation;
 }
Ejemplo n.º 10
0
 public TcpSocketListener(ServerBuilderOptions serverBuilderOptions,
                          IServerPacketProcessor serverPacketProcessor,
                          IBufferManager bufferManager,
                          ILogger <TcpSocketListener> logger,
                          ITcpConnections tcpConnections)
 {
     this.serverBuilderOptions  = serverBuilderOptions;
     this.serverPacketProcessor = serverPacketProcessor;
     this.bufferManager         = bufferManager;
     this.logger              = logger;
     this.tcpConnections      = tcpConnections;
     this.socketEventArgsPool =
         new ObjectPool <SocketAsyncEventArgs>(serverBuilderOptions.TcpMaxConnections);
     this.maxNumberAcceptedClients = new Semaphore(this.serverBuilderOptions.TcpMaxConnections,
                                                   this.serverBuilderOptions.TcpMaxConnections);
 }
Ejemplo n.º 11
0
        public UdpClientListener(ServerBuilderOptions options,
                                 ILogger <UdpClientListener> logger,
                                 IServerPacketProcessor serverPacketProcessor,
                                 IServerInformation serverInformation)
        {
            this.options = options;
            this.logger  = logger;
            this.serverPacketProcessor = serverPacketProcessor;
            this.serverInformation     = serverInformation;

            endPointPool = new ObjectPool <EndPoint>(this.options.UdpSocketObjectPoolSize);

            for (var i = 0; i < endPointPool.Capacity; i++)
            {
                endPointPool.Push(new IPEndPoint(IPAddress.Loopback, this.options.UdpPort));
            }
        }