static void Main(string[] args)
        {
            _rand = new Random(Environment.TickCount);

            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect    += WebServerOnConnect;
            _webServer.onData       += WebServerOnData;
            _webServer.onDisconnect += WebServerOnDisconnect;

            Timer stateUpdateTimer = new Timer(1f / Constants.SERVER_TICKRATE * 1000);

            stateUpdateTimer.Elapsed  += StateUpdateTimerOnElapsed;
            stateUpdateTimer.AutoReset = true;
            stateUpdateTimer.Enabled   = true;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();

                switch (_currentState)
                {
                case GameState.Waiting:
                {
                    if (_connectedIds.Count >= 2)
                    {
                        _currentState = GameState.Begin;
                        SendStateUpdate(_currentState);
                    }

                    break;
                }

                case GameState.Begin:
                {
                    // Set timer to go to builder state
                    Timer beginTimer = new Timer(SECONDS_WAITING_IN_BEGIN * 1000);
                    beginTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _currentState = GameState.Builder;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Builder:
                {
                }
                }
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 2
0
 public ThriftServerDef(
     INiftyProcessor processor,
     TProtocolFactory protocolFactory,
     String name             = null,
     String host             = null,
     int serverPort          = 8080,
     long maxFrameSize       = DefaultMaxFrameSize,
     int queuedResponseLimit = 16,
     int maxConnections      = int.MaxValue,
     IThriftFrameCodecFactory thriftFrameCodecFactory = null,
     TimeSpan?clientIdleTimeout = null,
     TimeSpan?taskTimeout       = null,
     TimeSpan?queueTimeout      = null,
     SslConfig sslConfig        = null)
     : this((processor == null ? null : new DelegateNiftyProcessorFactory(t => processor)),
            protocolFactory,
            name,
            host,
            serverPort,
            maxFrameSize,
            queuedResponseLimit,
            maxConnections,
            thriftFrameCodecFactory,
            clientIdleTimeout,
            taskTimeout,
            queueTimeout,
            sslConfig)
 {
 }
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect += delegate(int i) {
                Console.WriteLine($"Client {i} joined, sending hello");
                byte[] buff = System.Text.Encoding.UTF8.GetBytes("Hello from server");
                _webServer.SendOne(i, new ArraySegment <byte>(buff));
            };

            _webServer.onData += delegate(int i, ArraySegment <byte> data) {
                string msg = System.Text.Encoding.UTF8.GetString(data.Array);
                Console.WriteLine($"Client {i} send: {msg}");
            };

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 4
0
 public ThriftServerDef(
     INiftyProcessorFactory processorFactory,
     TProtocolFactory protocolFactory,
     String name             = null,
     String host             = null,
     int serverPort          = 5858,
     long maxFrameSize       = DefaultMaxFrameSize,
     int queuedResponseLimit = 16,
     int maxConnections      = int.MaxValue,
     IThriftFrameCodecFactory thriftFrameCodecFactory = null,
     TimeSpan?clientIdleTimeout = null,
     TimeSpan?taskTimeout       = null,
     TimeSpan?queueTimeout      = null,
     SslConfig sslConfig        = null
     )
     : this(processorFactory,
            TDuplexProtocolFactory.FromSingleFactory(protocolFactory),
            name,
            host,
            serverPort,
            maxFrameSize,
            queuedResponseLimit,
            maxConnections,
            thriftFrameCodecFactory,
            clientIdleTimeout,
            taskTimeout,
            queueTimeout,
            sslConfig)
 {
 }
Esempio n. 5
0
        public ThriftServerDef(
            INiftyProcessorFactory processorFactory,
            TDuplexProtocolFactory protocolFactory,
            String name             = null,
            String host             = null,
            int serverPort          = 5858,
            long maxFrameSize       = DefaultMaxFrameSize,
            int queuedResponseLimit = 16,
            int maxConnections      = int.MaxValue,
            IThriftFrameCodecFactory thriftFrameCodecFactory = null,
            TimeSpan?clientIdleTimeout = null,
            TimeSpan?taskTimeout       = null,
            TimeSpan?queueTimeout      = null,
            SslConfig sslConfig        = null
            )
        {
            Guard.ArgumentNotNull(protocolFactory, nameof(protocolFactory));

            this.Name                    = String.IsNullOrWhiteSpace(name) ? ($"nifty-{Interlocked.Increment(ref _globalId)}") : name;
            this.Host                    = host;
            this.ServerPort              = serverPort;
            this.MaxFrameSize            = maxFrameSize;
            this.MaxConnections          = maxConnections;
            this.QueuedResponseLimit     = queuedResponseLimit;
            this.ProcessorFactory        = processorFactory;
            this.DuplexProtocolFactory   = protocolFactory;
            this.ClientIdleTimeout       = clientIdleTimeout ?? TimeSpan.Zero;
            this.TaskTimeout             = taskTimeout ?? TimeSpan.Zero;
            this.QueueTimeout            = queueTimeout ?? TimeSpan.Zero;
            this.ThriftFrameCodecFactory = thriftFrameCodecFactory ?? new DefaultThriftFrameCodecFactory();
            //this.Executor = executor ?? new DotNetty.Common.Concurrency.SingleThreadEventExecutor;
            //this.SecurityFactory = securityFactory;
            this.SslConfig = sslConfig;
        }
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect    += WebServerOnConnect;
            _webServer.onData       += WebServerOnData;
            _webServer.onDisconnect += WebServerOnDisconnect;

            Timer stateUpdateTimer = new Timer(1f / Constants.SERVER_TICKRATE * 1000);

            stateUpdateTimer.Elapsed  += StateUpdateTimerOnElapsed;
            stateUpdateTimer.AutoReset = true;
            stateUpdateTimer.Enabled   = true;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 7
0
    // Start is called before the first frame update
    void Start()
    {
        _timeSinceLastSend = Time.time;
        _playerTransforms  = new Dictionary <ushort, uint[]>();
        _connectionIds     = new List <int>();

        SslConfig sslConfig;
        TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

        if (Application.isBatchMode)
        {
            Debug.Log("Setting up secure server");
            sslConfig = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
        }
        else
        {
            Debug.Log("Setting up non secure server");
            sslConfig = new SslConfig(false, "", "", SslProtocols.Tls12);
        }
        _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
        _webServer.Start(Constants.GAME_PORT);

        Debug.Log("Server started");

        _webServer.onConnect += WebServerOnonConnect;

        _webServer.onData += WebServerOnonData;

        _webServer.onError += delegate(int i, Exception exception)
        {
            Debug.Log("Error: " + exception.Message);
        };

        _webServer.onDisconnect += WebServerOnonDisconnect;
    }
Esempio n. 8
0
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
        }
Esempio n. 10
0
 public ThriftServer(
     INiftyProcessor processor,
     ThriftServerConfig serverConfig,
     SslConfig sslConfig          = null,
     ILoggerFactory loggerFactory = null)
     : this(processor,
            serverConfig,
            DefaultFrameCodecFactories,
            DefaultProtocolFactories,
            sslConfig,
            loggerFactory)
 {
 }
Esempio n. 11
0
 public ThriftServer(
     INiftyProcessor processor,
     int port                     = 0,
     SslConfig sslConfig          = null,
     ILoggerFactory loggerFactory = null)
     : this(processor,
            new ThriftServerConfig() { Port = Math.Max(0, port) },
            DefaultFrameCodecFactories,
            DefaultProtocolFactories,
            sslConfig,
            loggerFactory)
 {
 }
Esempio n. 12
0
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect += delegate(int i) {
            }
        }
Esempio n. 13
0
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect += delegate(int i) {
                Console.WriteLine($"Client {i} joined, sending hello");
                byte[] buff = System.Text.Encoding.UTF8.GetBytes("Hello from server");
                _webServer.SendOne(i, "Hello from server");
            };
        }
Esempio n. 14
0
        public ThriftServer(
            INiftyProcessor processor,
            ThriftServerConfig serverConfig,
            IDictionary <String, IThriftFrameCodecFactory> availableFrameCodecFactories,
            IDictionary <String, TDuplexProtocolFactory> availableProtocolFactories,
            SslConfig sslConfig          = null,
            ILoggerFactory loggerFactory = null
            )
        {
            Guard.ArgumentNotNull(serverConfig, nameof(serverConfig));
            Guard.ArgumentNotNull(availableFrameCodecFactories, nameof(availableFrameCodecFactories));
            Guard.ArgumentNotNull(availableProtocolFactories, nameof(availableProtocolFactories));
            Guard.ArgumentCondition(availableFrameCodecFactories.ContainsKey(serverConfig.TransportName), $"No available server transport named {serverConfig.TransportName}");
            Guard.ArgumentCondition(availableProtocolFactories.ContainsKey(serverConfig.ProtocolName), $"No available server protocol named {serverConfig.ProtocolName}");

            _eventLocked = new ManualResetEvent(true);
            _logger      = loggerFactory?.CreateLogger <ThriftServer>() ?? (ILogger)NullLogger.Instance;
            ThriftServerDef def = new ThriftServerDef(
                new DelegateNiftyProcessorFactory(t => processor),
                availableProtocolFactories[serverConfig.ProtocolName],
                "thrift",
                serverConfig.BindingAddress,
                serverConfig.Port,
                serverConfig.MaxFrameSizeBytes,
                serverConfig.MaxQueuedResponsesPerConnection,
                serverConfig.ConnectionLimit ?? int.MaxValue,
                availableFrameCodecFactories[serverConfig.TransportName],
                serverConfig.IdleConnectionTimeout,
                serverConfig.TaskExpirationTimeout != TimeSpan.Zero ? serverConfig.TaskExpirationTimeout : (TimeSpan?)null,
                serverConfig.QueueTimeout != TimeSpan.Zero ? serverConfig.QueueTimeout : (TimeSpan?)null,
                sslConfig
                );

            NettyServerConfig config = new NettyServerConfig(new HashedWheelTimer(),
                                                             new MultithreadEventLoopGroup(serverConfig.AcceptorThreadCount),
                                                             new MultithreadEventLoopGroup(serverConfig.WorkerThreadCount), serverConfig.IOThreadCount,//20170515陈慎远临时添加
                                                             null,
                                                             loggerFactory);

            //NettyServerConfig config = new NettyServerConfig(timer:new HashedWheelTimer(),
            //    bossGroup: new MultithreadEventLoopGroup(serverConfig.AcceptorThreadCount),
            //    ioThreadCount:1);


            _transport = new NettyServerTransport(def, config);
        }
Esempio n. 15
0
 /// <summary>
 ///     构造函数
 /// </summary>
 /// <param name="serviceLocator">服务定位器</param>
 /// <param name="config">服务器配置</param>
 /// <param name="handlers">handlers</param>
 /// <param name="serviceTypes">实例对象类型</param>
 /// <param name="codescs">自定义codec</param>
 /// <param name="sslConfig"></param>
 /// <param name="loggerFactory">logger</param>
 internal ThriftyServer(
     IServiceLocator serviceLocator,
     ThriftServerConfig config,
     List <ThriftEventHandler> handlers,
     IEnumerable <Type> serviceTypes,
     IEnumerable <IThriftCodec> codescs,
     SslConfig sslConfig          = null,
     ILoggerFactory loggerFactory = null)
 {
     this._config         = config;
     this._handlers       = handlers;
     this._serviceTypes   = serviceTypes;
     this._codescs        = codescs;
     this._sslConfig      = sslConfig;
     this._loggerFactory  = loggerFactory;
     this._serviceLocator = serviceLocator;
     this._logger         = loggerFactory?.CreateLogger <ThriftyServer>() ?? (ILogger)NullLogger.Instance;
 }
Esempio n. 16
0
        private static void WriteSSLValue(string key, string value)
        {
            if (sslConfig == null)
            {
                sslConfig = new SslConfig();
            }

            if (key == "CERT_FILE_LOCATION")
            {
                sslConfig.CertificateLocation = value;
            }
            if (key == "CA_FILE_LOCATION")
            {
                sslConfig.CaLocation = value;
            }
            if (key == "KEY_FILE_LOCATION")
            {
                sslConfig.KeyLocation = value;
            }
        }
Esempio n. 17
0
        static void Main(string[] args)
        {
            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect += WebServerOnConnect;

            _webServer.onData += WebServerOnData;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 18
0
        static void Main(string[] args)
        {
            _rand = new Random(Environment.TickCount);

            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect    += WebServerOnConnect;
            _webServer.onData       += WebServerOnData;
            _webServer.onDisconnect += WebServerOnDisconnect;

            Timer stateUpdateTimer = new Timer(1f / Constants.SERVER_TICKRATE * 1000);

            stateUpdateTimer.Elapsed  += StateUpdateTimerOnElapsed;
            stateUpdateTimer.AutoReset = true;
            stateUpdateTimer.Enabled   = true;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();

                // GUARD, DONT DO STATE STUFF IF WE ARE WAITING
                if (_waitingOnStateTimer)
                {
                    continue;
                }
                switch (_currentState)
                {
                case GameState.Waiting:
                {
                    if (_connectedIds.Count >= 2)
                    {
                        _currentState = GameState.Begin;
                        SendStateUpdate(_currentState);
                    }

                    break;
                }

                case GameState.Begin:
                {
                    // Set timer to go to builder state
                    Timer beginTimer = new Timer(SECONDS_WAITING_IN_BEGIN * 1000);
                    beginTimer.AutoReset = false;
                    beginTimer.Start();
                    _waitingOnStateTimer = true;

                    beginTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _movedObjects = new List <ushort>();
                        _currentState = GameState.Builder;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Builder:
                {
                    // Set timer to go to builder state
                    Timer buildTimer = new Timer(SECONDS_WAITING_IN_BUILD * 1000);
                    buildTimer.AutoReset = false;
                    buildTimer.Start();
                    _waitingOnStateTimer = true;

                    buildTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        // Reset everyones guesses
                        foreach (PlayerData playerData in _playerDatas.Values)
                        {
                            playerData.guesses.Clear();
                        }
                        _currentState = GameState.Search;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Search:
                {
                    // Set timer to go to scoring state
                    Timer searchTimer = new Timer(SECONDS_WAITING_IN_SEARCH * 1000);
                    searchTimer.AutoReset = false;
                    searchTimer.Start();
                    _waitingOnStateTimer = true;

                    searchTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _currentState = GameState.Scoring;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Scoring:
                {
                    foreach (var playerPair in _playerDatas)
                    {
                    }
                }
                }
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 19
0
        static void Main(string[] args)
        {
            _rand = new Random(Environment.TickCount);

            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect    += WebServerOnConnect;
            _webServer.onData       += WebServerOnData;
            _webServer.onDisconnect += WebServerOnDisconnect;

            Timer stateUpdateTimer = new Timer(1f / Constants.SERVER_TICKRATE * 1000);

            stateUpdateTimer.Elapsed  += StateUpdateTimerOnElapsed;
            stateUpdateTimer.AutoReset = true;
            stateUpdateTimer.Enabled   = true;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();

                // GUARD, DONT DO STATE STUFF IF WE ARE WAITING
                if (_waitingOnStateTimer)
                {
                    continue;
                }
                switch (_currentState)
                {
                case GameState.Waiting:
                {
                    if (_handshakenClientCount >= 2 && _connectedIds.Count >= 2)
                    {
                        _currentState = GameState.Begin;
                        SendStateUpdate(_currentState);
                    }

                    break;
                }

                case GameState.Begin:
                {
                    // Set timer to go to builder state
                    beginTimer           = new Timer(SECONDS_WAITING_IN_BEGIN * 1000);
                    beginTimer.AutoReset = false;
                    beginTimer.Start();
                    _waitingOnStateTimer = true;

                    beginTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _movedObjects = new Dictionary <ushort, Tuple <ushort, ushort> >();
                        _currentState = GameState.Builder;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Builder:
                {
                    // Set timer to go to builder state
                    buildTimer           = new Timer(SECONDS_WAITING_IN_BUILD * 1000);
                    buildTimer.AutoReset = false;
                    buildTimer.Start();
                    _waitingOnStateTimer = true;

                    buildTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        // Reset everyones guesses
                        foreach (PlayerData playerData in _playerDatas.Values)
                        {
                            playerData.guesses.Clear();
                        }

                        // Make sure builder actually moved something,
                        // if he didnt, goto scoring and give everyone else a point
                        if (_movedObjects.Count > 0)
                        {
                            _currentState = GameState.Search;
                        }
                        else
                        {
                            foreach (PlayerData data in _playerDatas.Values)
                            {
                                if (data.id != _builderId)
                                {
                                    data.points += 1;
                                }
                                _playerDatas[_builderId].points -= (ushort)_handshakenClientCount;
                            }
                            _currentState = GameState.Scoring;
                        }

                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Search:
                {
                    // Set timer to go to scoring state
                    searchTimer           = new Timer(SECONDS_WAITING_IN_SEARCH * 1000);
                    searchTimer.AutoReset = false;
                    searchTimer.Start();
                    _waitingOnStateTimer = true;

                    searchTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _currentState = GameState.Scoring;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Scoring:
                {
                    // Set timer to wait for points to come in from clients
                    scoringTimer           = new Timer(SECONDS_WAITING_IN_SCORING * 1000);
                    scoringTimer.AutoReset = false;
                    scoringTimer.Start();
                    _waitingOnStateTimer = true;

                    scoringTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        // Tell everyone everyones scores
                        _bitBuffer.Clear();
                        _bitBuffer.AddByte(7);
                        _bitBuffer.AddUShort((ushort)_playerDatas.Count);

                        foreach (PlayerData data in _playerDatas.Values)
                        {
                            _bitBuffer.AddUShort(data.id);
                            _bitBuffer.AddShort(data.points);
                        }

                        _bitBuffer.ToArray(_buffer);
                        _webServer.SendAll(_connectedIds, new ArraySegment <byte>(_buffer, 0, 3 + 4 * _playerDatas.Count));

                        if (_handshakenClientCount >= 2 && _connectedIds.Count >= 2)
                        {
                            _currentState = GameState.Begin;
                        }
                        else
                        {
                            _currentState = GameState.Waiting;
                        }
                        SendStateUpdate(_currentState);
                    };

                    break;
                }
                }
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 20
0
        static void Main(string[] args)
        {
            _rand = new Random(Environment.TickCount);

            SslConfig sslConfig;
            TcpConfig tcpConfig = new TcpConfig(true, 5000, 20000);

            Console.WriteLine("Setting up secure server");
            sslConfig  = new SslConfig(true, "cert.pfx", "", SslProtocols.Tls12);
            _webServer = new SimpleWebServer(10000, tcpConfig, 16 * 1024, 3000, sslConfig);
            _webServer.Start(Constants.GAME_PORT);
            Console.WriteLine("Server started");

            _webServer.onConnect    += WebServerOnConnect;
            _webServer.onData       += WebServerOnData;
            _webServer.onDisconnect += WebServerOnDisconnect;

            Timer stateUpdateTimer = new Timer(1f / Constants.SERVER_TICKRATE * 1000);

            stateUpdateTimer.Elapsed  += StateUpdateTimerOnElapsed;
            stateUpdateTimer.AutoReset = true;
            stateUpdateTimer.Enabled   = true;

            while (!Console.KeyAvailable)
            {
                _webServer.ProcessMessageQueue();

                // GUARD, DONT DO STATE STUFF IF WE ARE WAITING
                if (_waitingOnStateTimer)
                {
                    continue;
                }
                switch (_currentState)
                {
                case GameState.Waiting:
                {
                    if (_connectedIds.Count >= 2)
                    {
                        _currentState = GameState.Begin;
                        SendStateUpdate(_currentState);
                    }

                    break;
                }

                case GameState.Begin:
                {
                    // Set timer to go to builder state
                    beginTimer           = new Timer(SECONDS_WAITING_IN_BEGIN * 1000);
                    beginTimer.AutoReset = false;
                    beginTimer.Start();
                    _waitingOnStateTimer = true;

                    beginTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _movedObjects = new List <ushort>();
                        _currentState = GameState.Builder;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Builder:
                {
                    // Set timer to go to builder state
                    buildTimer           = new Timer(SECONDS_WAITING_IN_BUILD * 1000);
                    buildTimer.AutoReset = false;
                    buildTimer.Start();
                    _waitingOnStateTimer = true;

                    buildTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        // Reset everyones guesses
                        foreach (PlayerData playerData in _playerDatas.Values)
                        {
                            playerData.guesses.Clear();
                        }
                        _currentState = GameState.Search;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Search:
                {
                    // Set timer to go to scoring state
                    searchTimer           = new Timer(SECONDS_WAITING_IN_SEARCH * 1000);
                    searchTimer.AutoReset = false;
                    searchTimer.Start();
                    _waitingOnStateTimer = true;

                    searchTimer.Elapsed += delegate(Object source, ElapsedEventArgs e) {
                        _waitingOnStateTimer = false;

                        _currentState = GameState.Scoring;
                        SendStateUpdate(_currentState);
                    };
                    break;
                }

                case GameState.Scoring:
                {
                    short builderPoints = 0;

                    _bitBuffer.Clear();
                    _bitBuffer.AddByte(7);
                    _bitBuffer.AddUShort((ushort)_playerDatas.Count);


                    foreach (var playerData in _playerDatas.Values)
                    {
                        // GUARD, DON'T SCORE THE BUILDER THIS WAY
                        if (playerData.id == _builderId)
                        {
                            continue;
                        }

                        // Free points for objects builder couldnt move
                        // A point for a correct guess, minus point for a wrong guess
                        int numCorrect = _movedObjects.Distinct().Intersect(playerData.guesses).Count();
                        int newPoints  = (numCorrect * 2) - playerData.guesses.Count + (NUMBER_OF_MOVEABLE_OBJECTS - _movedObjects.Count);
                        playerData.points += (short)newPoints;

                        // Builder gets a point for each player who couldnt find any differences
                        if (numCorrect == 0)
                        {
                            builderPoints += 1;
                        }

                        _bitBuffer.AddUShort(playerData.id);
                        _bitBuffer.AddShort(playerData.points);
                    }

                    _playerDatas[_builderId].points += builderPoints;
                    _bitBuffer.AddUShort((ushort)_builderId);
                    _bitBuffer.AddShort(_playerDatas[_builderId].points);

                    _bitBuffer.ToArray(_buffer);
                    _webServer.SendAll(_connectedIds, new ArraySegment <byte>(_buffer, 0, 3 + 2 * _playerDatas.Count));

                    if (_connectedIds.Count >= 2)
                    {
                        _currentState = GameState.Begin;
                    }
                    else
                    {
                        _currentState = GameState.Waiting;
                    }
                    SendStateUpdate(_currentState);

                    break;
                }
                }
            }

            Console.WriteLine("Closing server");
            _webServer.Stop();
        }
Esempio n. 21
0
 /// <summary>
 /// 设置ssl
 /// </summary>
 /// <param name="config">SslConfig</param>
 /// <returns></returns>
 public ThriftyBootstrap SslConfig(SslConfig config)
 {
     this.CheckCanAddFutures();
     this._serverConfig.Ssl = config;
     return(this);
 }