internal UpdateContext(PayloadTime lastPayloadTime, PayloadData payload, InitializationData initializationData) { Time = lastPayloadTime == null ? new PayloadTime() : new PayloadTime(lastPayloadTime.At); Payload = payload; // TODO: Update map width and height on map resize. MapWidth = initializationData.Configuration.MapConfiguration.WIDTH; MapHeight = initializationData.Configuration.MapConfiguration.HEIGHT; YourShip = payload.Ships.Single(s => s.Id == initializationData.ShipID); OtherShips = payload.Ships.Where(s => s.Id != initializationData.ShipID); }
public async Task ConnectAsync(CancellationToken cancellationToken = default) { var handler = new HttpClientHandler() { CookieContainer = _cookies }; var httpClient = new HttpClient(handler) { BaseAddress = _serverUri }; var request = new HttpRequestMessage(HttpMethod.Get, $"/api/join?name={_botInformation.DisplayName}&role=Player&photoUrl={_botInformation.Photo}"); await httpClient.SendAsync(request, cancellationToken); _connection.On("d", new[] { typeof(JArray) }, (parameters) => HandlePayloadAsync((JArray)parameters[0])); // Binding this because the client crashes on unknown invocations _connection.On <JArray>("l", (data) => { }); _connection.On <JArray>("mapSizeIncreased", data => { }); _connection.On("disconnect", () => DisconnectAsync().Wait()); _connection.On <string, string, int>("chatMessage", (from, message, type) => Console.WriteLine($"{from}: {message}")); await _connection.StartAsync(cancellationToken); var stateCookie = _cookies.GetCookies(_serverUri)["shootr.state"]; var decodedValue = WebUtility.UrlDecode(stateCookie.Value); var shootRState = JsonConvert.DeserializeObject <ShootRState>(decodedValue); var clientInitializationData = await _connection.InvokeAsync <InitializationData>("bot_initializeClient", shootRState.RegistrationID, cancellationToken); if (clientInitializationData.ServerFull) { throw new Exception("Server Full."); } _initializationData = clientInitializationData; _payloadDecompressor = new PayloadDecompressor(clientInitializationData); await _connection.InvokeAsync("bot_readyForPayloads", cancellationToken); _connected = true; }