Пример #1
0
        /// <summary>
        /// Attempts to connect with the game server
        /// </summary>
        private void ConnectToGameServer()
        {
            if (ServiceManager.Theater == null)
            {
                ServiceManager.ConnectToTheater(server);

                ServiceManager.Theater.ClearRegisteredCallbacks();

                clientCallback = new GameCallback(null, buffer);
                ClockSync clockCallback = new ClockSync();

                ServiceManager.Theater.RegisterCallback(clientCallback);
                ServiceManager.Theater.RegisterCallback(clockCallback);

                string key = ServiceManager.Echelon.RequestJoinGameServer(server);
                if (!ServiceManager.Theater.JoinServer(key))
                {
                    throw new Exception("Cannot connect to the game server.");
                }
            }
            else
            {
                ServiceManager.Theater.ClearRegisteredCallbacks();

                clientCallback = new GameCallback(null, buffer);
                ClockSync clockCallback = new ClockSync();

                ServiceManager.Theater.RegisterCallback(clientCallback);
                ServiceManager.Theater.RegisterCallback(clockCallback);
            }

            ServiceManager.CurrentServer = server;
            currentMap = ServiceManager.Theater.GetCurrentMapName();
        }
Пример #2
0
        /// <summary>
        /// Connect to a target game server. Throws an exception if something goes
        /// wrong.
        /// </summary>
        /// <param name="server">Game server to connect to.</param>
        public void ConnectToGameServer(GameServerInfo server)
        {
            string key = MainServer.RequestJoinGameServer(server);

            GameServer = new GameCommunicator(
                server.Host, server.Port, server.UseGlacier2);
            GameServer.LogFile = AuthInfo.Username + "GameLog.log";

            if (!GameServer.Connect())
            {
                HandleError("Could not connect to the game server: reason unknown.");
            }

            clientCallback = new ClientI(BotRunner, this, buffer);
            clockCallback  = new ClockSync();

            GameServer.RegisterCallback(clientCallback);
            GameServer.RegisterCallback(clockCallback);

            if (!GameServer.JoinServer(key))
            {
                HandleError("Could not join the game server: invalid key.");
            }
            Thread.Sleep(100);

            Debugger.Write("{0}: Connected to the game server! Ping: {1}",
                           AuthInfo.Username, server.GetFormattedAverageLatency());

            RefreshPlayerList();
            DownloadAndLoadMap();
            Game.GameModeHandler = CreateGameHandler(GameMode);
            GameServer.Ready();
        }
Пример #3
0
        public Mcu(ConfigWrapper config, ClockSync clocksync)
        {
            this._printer   = config.get_printer();
            this._clocksync = clocksync;
            this._reactor   = _printer.get_reactor();
            this._name      = config.get_name();
            if (this._name.StartsWith("mcu "))
            {
                this._name = this._name.Substring(4);
            }
            this._printer.register_event_handler("klippy:connect", this._connect);
            this._printer.register_event_handler("klippy:shutdown", this._shutdown);
            this._printer.register_event_handler("klippy:disconnect", this._disconnect);
            // Serial port
            this._serialport = config.get("serial", "/dev/ttyS0");
            var baud = 0;

            if (!(this._serialport.StartsWith("/dev/rpmsg_") || this._serialport.StartsWith("/tmp/klipper_host_")))
            {
                baud = (int)config.getint("baud", 250000, minval: 2400);
            }
            this._serial = new SerialReader(this._reactor, this._serialport, baud);
            // Restarts
            this._restart_method = RestartMethod.Command;
            if (baud != 0)
            {
                this._restart_method = config.getEnum <RestartMethod>("restart_method", RestartMethod.None);
            }
            this._reset_cmd          = null;
            this._emergency_stop_cmd = null;
            this._is_shutdown        = false;
            this._shutdown_msg       = "";
            // Config building
            this._printer.lookup_object <PrinterPins>("pins").register_chip(this._name, this);
            this._oid_count        = 0;
            this._config_callbacks = new List <Action>();
            this._init_cmds        = new List <string>();
            this._config_cmds      = new List <string>();
            this._pin_map          = config.get("pin_map", null);
            this._custom           = config.get("custom", "");
            this._mcu_freq         = 0.0;
            // Move command queuing
            this._max_stepper_error = config.getfloat("max_stepper_error", 2.5E-05, minval: 0.0);
            this._move_count        = 0;
            this._stepqueues        = new List <stepcompress>();
            this._steppersync       = null;
            // Stats
            this._stats_sumsq_base = 0.0;
            this._mcu_tick_avg     = 0.0;
            this._mcu_tick_stddev  = 0.0;
            this._mcu_tick_awake   = 0.0;
        }
Пример #4
0
        public void Dispose()
        {
            Shutdown();

            if (buffer != null)
            {
                IEvent[] events = buffer.PopAll();
                if (events != null && events.Length > 0)
                {
                    foreach (IEvent evt in events)
                    {
                        evt.Dispose();
                    }
                }
            }

            BotRunner      = null;
            clientCallback = null;
            clockCallback  = null;
            buffer         = null;
            Game           = null;
            Player         = null;
        }
Пример #5
0
        public State(ClientType clientType)
        {
            _clientType  = clientType;
            _clockSyncer = new ClockSync(new ClockSyncOptions {
                SampleFunc = () => _client.GetTime()
            });

            _methodHandler.AddHandler("onReady", method =>
            {
                var p       = (JsonElement)method.Parameters;
                var isReady = p.GetProperty("isReady").GetBoolean();
                //if (p.TryGetValue("isReady", out var isReady))
                {
                    IsReady = (bool)isReady;
                    _ready.OnNext(IsReady);
                }
                return(null);
            });

            // Scene Events
            _methodHandler.AddHandler("onSceneCreate", method =>
            {
                var p = (JsonElement)method.Parameters;
                if (p.TryGetProperty("scenes", out var scenes))
                {
                    foreach (var sceneData in scenes.EnumerateArray())
                    {
                        OnSceneCreate(JsonSerializer.Deserialize <SceneData>(sceneData.GetRawText()));
                    }
                }
                return(null);
            });
            _methodHandler.AddHandler("onSceneDelete", method =>
            {
                var p = (JsonElement)method.Parameters;
                if (p.TryGetProperty("sceneID", out var sceneID) && p.TryGetProperty("reassignSceneID", out var reassignSceneID))
                {
                    OnSceneDelete(sceneID.GetString(), reassignSceneID.GetString());
                }
                return(null);
            });
            _methodHandler.AddHandler("onSceneUpdate", method =>
            {
                var p = (JsonElement)method.Parameters;
                if (p.TryGetProperty("scenes", out var scenes))
                {
                    foreach (var sceneData in scenes.EnumerateArray())
                    {
                        OnSceneUpdate(JsonSerializer.Deserialize <SceneData>(sceneData.GetRawText()));
                    }
                }
                return(null);
            });

            // Control Events
            _methodHandler.AddHandler("onControlCreate", method =>
            {
                var p = (JsonElement)method.Parameters;

                if (p.TryGetProperty("sceneID", out var sceneID))
                {
                    if (_scenes.TryGetValue(sceneID.GetString(), out Scene scene))
                    {
                        if (p.TryGetProperty("controls", out var controls))
                        {
                            scene.OnControlsCreate(controls.EnumerateArray().Select(x => JsonSerializer.Deserialize <ControlData>(x.GetRawText())).ToList());
                        }
                    }
                }
                return(null);
            });

            _methodHandler.AddHandler("onControlDelete", method =>
            {
                var p = (JsonElement)method.Parameters;
                if (p.TryGetProperty("sceneID", out var sceneID))
                {
                    if (_scenes.TryGetValue(sceneID.GetString(), out Scene scene))
                    {
                        if (p.TryGetProperty("controls", out var controls))
                        {
                            scene.OnControlsDelete(controls.EnumerateArray().Select(x => JsonSerializer.Deserialize <ControlData>(x.GetRawText())).ToList());
                        }
                    }
                }
                return(null);
            });

            _methodHandler.AddHandler("onControlUpdate", method =>
            {
                var p = (JsonElement)method.Parameters;
                if (p.TryGetProperty("sceneID", out var sceneID))
                {
                    if (_scenes.TryGetValue(sceneID.GetString(), out Scene scene))
                    {
                        if (p.TryGetProperty("controls", out var controls))
                        {
                            scene.OnControlsUpdate(controls.EnumerateArray().Select(x => JsonSerializer.Deserialize <ControlData>(x.GetRawText())).ToList());
                        }
                    }
                }
                return(null);
            });

            _methodHandler.AddHandler("onWorldUpdate", method =>
            {
                var newWorld = method.Parameters;
//                if (newWorld.TryGetProperty("scenes", out var scenes))
//                    newWorld.s("scenes");


                return(null);
            });

            // Group Events
            _methodHandler.AddHandler("onGroupCreate", method => {
                var p    = (JsonElement)method.Parameters;
                var arr  = p.GetProperty("groups").GetRawText();
                var list = JsonSerializer.Deserialize <List <Group> >(arr);
                foreach (var group in list)
                {
                    OnGroupCreate(group);
                }
                return(null);
            });

            _methodHandler.AddHandler("onGroupDelete", method =>
            {
                var p = (JsonElement)method.Parameters;
                OnGroupDelete(p.GetProperty("groupID").GetString(), p.GetProperty("reassignGroupID").GetString());
                return(null);
            });

            _methodHandler.AddHandler("onGroupUpdate", method =>
            {
                var p    = (JsonElement)method.Parameters;
                var arr  = p.GetProperty("groups").GetRawText();
                var list = JsonSerializer.Deserialize <List <Group> >(arr);
                foreach (var group in list)
                {
                    OnGroupUpdate(group);
                }
                return(null);
            });

            _clockSyncer.DeltaObs.Subscribe(delta =>
            {
                _clockDelta = delta;
            });

            if (_clientType == ClientType.GameClient)
            {
                AddGameClientHandlers();
            }
            else
            {
                AddParticipantHandlers();
            }
        }