Esempio n. 1
0
 private void TimerUpdateWorld_Tick(object sender, EventArgs e)
 {
     if (!updating)
     {
         updating = true;
         arena.Update();
         PanelArena.Refresh();
         updating = false;
     }
     else
     {
         Console.WriteLine("!");
     }
 }
Esempio n. 2
0
        private async Task JoinArena()
        {
            using (var socket = new ClientWebSocket())
            {
                try
                {
                    await socket.ConnectAsync(new Uri("ws://localhost:5000"), CancellationToken.None);
                }
                catch (Exception e)
                {
                    _ = Console.Out.WriteLineAsync(e.ToString());
                    throw;
                }

                _ = Task.Run(() =>
                {
                    while (true)
                    {
                        var line    = Console.ReadLine();
                        var segment = new ArraySegment <byte>(Encoding.UTF8.GetBytes(line));

                        socket.SendAsync(segment, WebSocketMessageType.Binary, true, CancellationToken.None);
                    }
                });

                while (true)
                {
                    try
                    {
                        var buf = new byte[4096];

                        var msg = "";
                        WebSocketReceiveResult res;
                        do
                        {
                            res = await socket.ReceiveAsync(new ArraySegment <byte>(buf), CancellationToken.None);

                            msg += Encoding.ASCII.GetString(buf, 0, res.Count);
                        } while (!res.EndOfMessage);

                        // await Console.Out.WriteLineAsync($"Received {res.Count} bytes");

                        var message = JsonConvert.DeserializeObject <Message>(msg);
                        if (message.MessageType == MessageType.GameUpdate)
                        {
                            var gu = (message.Content as JObject).ToObject <GameUpdate>();

                            WriteGameInfo(gu);
                            _map = gu.Arena;
                        }
                        else
                        {
                            Console.WriteLine(message.Content);
                        }

                        PanelArena.Refresh();

                        await socket.SendAsync(new ArraySegment <byte>(new[] { (byte)_nextDirection }),
                                               WebSocketMessageType.Binary, true, CancellationToken.None);
                    }
                    catch (Exception e)
                    {
                        _ = Console.Out.WriteLineAsync(e.ToString());
                    }
                }
            }
        }