Exemple #1
0
        static void Main(string[] args)
        {
            XmlConfigurator.Configure();
            try
            {
                ThreadPool.SetMinThreads(32, 1024);

                var statePersister = new StatePersister();

                AuthController    authController    = new AuthController(StatePersister.LoadUsers(), statePersister);
                ElectroController electroController = new ElectroController(StatePersister.LoadElections(), StatePersister.LoadKeys(), authController, statePersister);

                var staticHandler = new StaticHandler(GetPrefix(null), Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "web"));
                staticHandler.Start();

                var registerHandler = new RegisterHandler(authController, GetPrefix("register"));
                registerHandler.Start();

                var loginHandler = new LoginHandler(authController, GetPrefix("login"));
                loginHandler.Start();

                var logoutHandler = new LogoutHandler(authController, GetPrefix("logout"));
                logoutHandler.Start();

                var startElectionHandler = new StartElectionHandler(electroController, authController, GetPrefix("startElection"));
                startElectionHandler.Start();

                var listElectionsHandler = new ListElectionsHandler(electroController, authController, GetPrefix("listElections"));
                listElectionsHandler.Start();

                var findElectionHandler = new FindElectionHandler(electroController, authController, GetPrefix("findElection"));
                findElectionHandler.Start();

                var nominateHandler = new NominateHandler(electroController, authController, GetPrefix("nominate"));
                nominateHandler.Start();

                var voteHandler = new VoteHandler(electroController, authController, GetPrefix("vote"));
                voteHandler.Start();

                while (true)
                {
                    Thread.Sleep(electionsSnapshotTimeoutMs);
                    try
                    {
                        log.Info("Saving elections snapshot");
                        StatePersister.SaveAllElections(electroController.DumpElections().Reverse());
                        log.Info("Elections snapshot saved");
                    }
                    catch (Exception e)
                    {
                        log.Error("Failed to save elections snapshot. Sleeping and retrying", e);
                    }
                }
            }
            catch (Exception e)
            {
                log.Fatal(e);
            }
        }
Exemple #2
0
        protected override void SetUp()
        {
            _activationCtx = new TActivationContext();

            DisposableHandler.Reset();
            SomeHandler.Reset();
            StaticHandler.Reset();
        }
Exemple #3
0
        protected override void SetUp()
        {
            _factory = new TFactory();

            DisposableHandler.Reset();
            SomeHandler.Reset();
            StaticHandler.Reset();
        }
Exemple #4
0
        private static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += (sender, args) => Console.Error.WriteLine(args.ExceptionObject);

            ThreadPool.SetMinThreads(HttpServerSettings.Concurrency, HttpServerSettings.Concurrency);
            ThreadPool.SetMaxThreads(HttpServerSettings.Concurrency, HttpServerSettings.Concurrency);

            var cancellation = new CancellationTokenSource();
            var token        = cancellation.Token;

            var wsServer = new WsServer <User>(9999, ws => Users.Find(ws.HttpRequest.Cookies?.GetAuth()));

            var authHandler = new AuthHandler(login => Task.Run(() => wsServer.BroadcastAsync(user => AuthHandler.FormatUserMessage(user, login), token), token));
            var foodHandler = new FoodHandler((login, food) => Task.Run(() => wsServer.BroadcastAsync(user => FoodHandler.FormatUserMessage(user, login, food), token), token));

            var staticHandler = new StaticHandler("static", ctx =>
            {
                var url = ctx.Request.Url;
                if (url.HostNameType != UriHostNameType.Dns && url.HostNameType != UriHostNameType.IPv4 && url.HostNameType == UriHostNameType.IPv6)
                {
                    throw new HttpException(400, "Invalid host");
                }

                ctx.Response.Headers["X-Frame-Options"]         = "deny";
                ctx.Response.Headers["X-XSS-Protection"]        = "1; mode=block";
                ctx.Response.Headers["Content-Security-Policy"] = $"default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self' ws://{url.Host}:9999;";

                ctx.SetCsrfTokenCookie();
            });

            var httpServer = new HttpServer(8888)
                             .AddHandler("POST", "/signin", authHandler.SignInAsync)
                             .AddHandler("POST", "/signup", authHandler.SignUpAsync)
                             .AddHandler("POST", "/put", foodHandler.PutAsync)
                             .AddHandler("GET", "/get", foodHandler.GetAsync)
                             .AddHandler("GET", "/", staticHandler.GetAsync);

            Console.CancelKeyPress += (sender, args) =>
            {
                Console.Error.WriteLine("Stopping...");
                args.Cancel = true;
                cancellation.Cancel();
            };

            Task.WaitAll(wsServer.AcceptLoopAsync(token), httpServer.AcceptLoopAsync(token));
        }
        public void Received(Packet p, int packetId)
        {
            try
            {
                if (p is PingPacket)
                {
                    lightClient.startPingStopwatch();

                    lightClient.sendObject(new PongPacket(), false);
                }
                else if (p is PingReceive)
                {
                    lightClient.endPingStopwatch();


                    lightClient.LoggerInstance.Debug("Ping: {0}", lightClient.getPingTime().Milliseconds + "ms");
                }
                else if (p is IllegalConnectionPacket)
                {
                    lightClient.LoggerInstance.Info(((IllegalConnectionPacket)p).message);
                    lightClient.disconnect(ServerDisconnectEvent.DisconnectStatus.CONNECTION_LOST);
                }
                else if (p is InitialHandshakePacket)
                {
                    // Handles object encryption key sharing
                    var packet = (InitialHandshakePacket)p;

                    var versionData = packet.getVersionData();

                    var versionRange = StaticHandler.getVersionRangeStatus(versionData);

                    if (versionRange == StaticHandler.VersionRange.MATCH_REQUIREMENTS)
                    {
                        lightClient.LoggerInstance.Info("Version range requirements match Server version.");
                    }
                    else
                    {
                        // Current version is smaller than the server's required minimum
                        if (versionRange == StaticHandler.VersionRange.WE_ARE_LOWER)
                        {
                            lightClient.LoggerInstance
                            .Info(
                                "The client version ({0}) does not meet server's minimum version ({1}) requirements. Expect incompatibility issues",
                                StaticHandler.VERSION_DATA.Version.ToString(), versionData.MinVersion.ToString());
                        }

                        // Current version is larger than server's minimum version
                        if (versionRange == StaticHandler.VersionRange.WE_ARE_HIGHER)
                        {
                            lightClient.LoggerInstance
                            .Info(
                                "The server version ({0}) does not meet client's minimum version ({1}) requirements. Expect incompatibility issues",
                                versionData.Version.ToString(), StaticHandler.VERSION_DATA.MinVersion.ToString());
                        }
                    }

                    var secretKey = EncryptionUtil.generateAESProvider();

                    // TODO: Remove this debug
                    string debug = "Using key " + string.Join(",", secretKey.Key) + " base64:" + Convert.ToBase64String(secretKey.Key);
                    StaticHandler.Core.Logger.Debug(debug);

                    lightClient.setSecretKey(secretKey);


                    var responsePacket = new KeyResponsePacket(secretKey, packet.getPublicKey());

                    lightClient.sendObject(responsePacket, false);


                    lightClient.callEvent(new ServerConnectHandshakeEvent(lightClient.Channel));
                }
                else if (p is RequestConnectInfoPacket)
                {
                    var connectedPacket = lightClient.buildConnectedPacket();

                    lightClient.sendObject(connectedPacket).ConfigureAwait(false);
                    StaticHandler.Core.Logger.Info("Sent the connection Packet for request");
                }
                else if (p is SelfMessagePacket)
                {
                    switch (((SelfMessagePacket)p).type)
                    {
                    case SelfMessagePacket.MessageType.TIMED_OUT_REGISTRATION:
                        lightClient.LoggerInstance.Info("Timed out on registering.");
                        lightClient.disconnect(ServerDisconnectEvent.DisconnectStatus.TIMEOUT);
                        break;

                    case SelfMessagePacket.MessageType.REGISTER_PACKET:
                        lightClient.registered = true;
                        lightClient.LoggerInstance.Info("Successfully connected to server");
                        lightClient.callEvent(new ServerConnectFinishEvent(lightClient.Channel));
                        break;

                    case SelfMessagePacket.MessageType.LOST_SERVER_CONNECTION:
                        lightClient.LoggerInstance.Info("Lost connection to server! Must have shutdown!");
                        lightClient.disconnect(ServerDisconnectEvent.DisconnectStatus.CONNECTION_LOST);
                        break;
                    }
                }

                foreach (var iPacketHandler in lightClient.getPacketHandlers())
                {
                    Task.Run(() =>
                    {
                        try
                        {
                            iPacketHandler.handlePacket(p, packetId);
                        }
                        catch (Exception e)
                        {
                            throw ExceptionUtil.throwParsePacketException(e, p);
                        }
                    });
                }
            }
            catch (ParsePacketException ignored)
            {
                throw;
            }
            catch (Exception e)
            {
                throw ExceptionUtil.throwParsePacketException(e, p);
            }
        }