Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }