/// <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(); }
/// <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(); }
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; }
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; }
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(); } }