Esempio n. 1
0
        async void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            using (DataReader dataReader = args.GetDataReader())
            {
                dataReader.ByteOrder = ByteOrder.LittleEndian;
                Debug.WriteLine("buffer lntgh: " + dataReader.UnconsumedBufferLength);
                while (dataReader.UnconsumedBufferLength != 0)
                {
                    Code   code = (Code)dataReader.ReadInt32();
                    Packet p;
                    switch (code)
                    {
                    case Code.Connecting:
                    {
                        Connected = true;
                        hostName  = args.RemoteAddress;
                        Debug.WriteLine("Connected to: " + hostName);
                        try
                        {
                            Stream output = (await socket.GetOutputStreamAsync(hostName, Port)).AsStreamForWrite();
                            writer = new BinaryWriter(output);
                        }
                        catch (Exception e)
                        {
                            Debug.WriteLine(e.Message);
                        }
                        send_buffer.Add(new Connected());
                        p = null;
                        break;
                    }

                    case Code.Ping:
                    {
                        p = Ping.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Pong:
                    {
                        p = Pong.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Acknowledge:
                    {
                        p = Acknowledge.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerCreationData:
                    {
                        p = AddOtherPlayer.ConstructPacket(dataReader);
                        send_buffer.Add(new Acknowledge(p.Code));
                        break;
                    }

                    case Code.Input:
                    {
                        p = Input.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.EntityXYCorrection:
                    {
                        p = EntityCorrection.ConstructPacket(dataReader);
                        break;
                    }

                    default: p = null; break;
                    }

                    if (p != null)
                    {
                        receive_buffer.Add(p);
                    }
                    else
                    {
                        Debug.WriteLine("Unrecognized packet " + code);
                        break;
                    }
                }
            }
        }
Esempio n. 2
0
        void ClientUpdate()
        {
            Packet p = client.GetNextReceived();

            switch (clientState)
            {
            case ClientState.CONNECTING:
            {
                if (!client.Connected)
                {
                    Debug.WriteLine("Sending connecting");
                    client.Send(new Connecting());
                }
                else
                {
                    if (p != null)
                    {
                        if (p.Code == Code.LevelGenerationData)
                        {
                            LevelGenData data = (LevelGenData)p;
                            seed = data.Seed;

                            level = new LevelGenerator(seed, data.Size, false);

                            //Create Player
                            player = new Player(0, 0, key);

                            //Create UI
                            ui = new PlayerUI(player);

                            //Add Player
                            level.AddEntity(player);

                            //Init level
                            level.Init();

                            client.Send(new AddOtherPlayer(player.GetX(), player.GetY()));

                            clientState = ClientState.ENTITY_EXCHANGE;
                        }
                        else
                        {
                            Debug.WriteLine("Failed connection!");
                            //Go back to menu
                            if (Frame.CanGoBack)
                            {
                                Frame.GoBack();
                            }
                        }
                    }
                }
                break;
            }

            case ClientState.ENTITY_EXCHANGE:
            {
                while (p != null)
                {
                    if (p.Code == Code.OtherPlayerCreationData)
                    {
                        AddOtherPlayer otherPlayer = (AddOtherPlayer)p;

                        OtherPlayer other = new OtherPlayer(otherPlayer.X, otherPlayer.Y, artificial);

                        level.AddEntity(other);

                        p = client.GetNextReceived();
                        if (p.Code != Code.OtherPlayerID)
                        {
                            Debug.WriteLine("Something is extremely wrong");
                        }
                        else
                        {
                            other.AddID(((OtherPlayerID)p).ID);
                        }
                    }
                    else if (p.Code == Code.OtherPlayerID)
                    {
                        OtherPlayerID playerID = (OtherPlayerID)p;
                        player.AddID(playerID.ID);

                        clientState = ClientState.READY;
                    }
                    p = client.GetNextReceived();
                }
                break;
            }

            case ClientState.READY:
            {
                while (p != null)
                {
                    if (p.Code == Code.Pong)
                    {
                        gotpong = true;
                        Pong po = (Pong)p;
                        Debug.WriteLine("Last ping: " + (watch.ElapsedMilliseconds - po.Time) + " ms");
                    }
                    else if (p.Code == Code.EntityXYCorrection)
                    {
                        level.AddCorrection((EntityCorrection)p);
                    }
                    else if (p.Code == Code.Input)
                    {
                        artificial.Update((Input)p);
                    }
                    p = client.GetNextReceived();
                }
                client.Send(new Input(key.up, key.down, key.left, key.right));
                break;
            }
            }
        }
Esempio n. 3
0
        void ServerUpdate()
        {
            Packet p = server.GetNextReceived();

            switch (serverState)
            {
            case ServerState.WAITING:
            {
                if (p != null)
                {
                    if (p.Code == Code.Acknowledge)
                    {
                        Acknowledge ack = (Acknowledge)p;
                        if (ack.Ack == Code.LevelGenerationData)
                        {
                            server.Send(new AddOtherPlayer(player.GetX(), player.GetY()));
                            server.Send(new OtherPlayerID(player.ID));

                            serverState = ServerState.ENTITY_EXCHANGE;
                            break;
                        }
                    }
                }
                if (server.Connected)
                {
                    //Client connected send level data
                    server.Send(new LevelGenData(seed, 500));
                }
                break;
            }

            case ServerState.ENTITY_EXCHANGE:
            {
                while (p != null)
                {
                    if (p.Code == Code.OtherPlayerCreationData)
                    {
                        AddOtherPlayer otherPlayer = (AddOtherPlayer)p;

                        OtherPlayer other = new OtherPlayer(otherPlayer.X, otherPlayer.Y, artificial);

                        level.AddEntity(other);

                        server.Send(new OtherPlayerID(other.ID));

                        serverState = ServerState.READY;
                    }
                    p = server.GetNextReceived();
                }
                break;
            }

            case ServerState.READY:
            {
                while (p != null)
                {
                    if (p.Code == Code.Ping)
                    {
                        Ping po = (Ping)p;
                        server.Send(new Pong(po.Time));
                    }
                    else if (p.Code == Code.Input)
                    {
                        artificial.Update((Input)p);
                    }
                    p = server.GetNextReceived();
                }
                server.Send(new EntityCorrection(player.ID, player.GetX(), player.GetY()));
                server.Send(new Input(key.up, key.down, key.left, key.right));
                break;
            }
            }
        }
Esempio n. 4
0
        void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            using (DataReader dataReader = args.GetDataReader())
            {
                dataReader.ByteOrder = ByteOrder.LittleEndian;
                while (dataReader.UnconsumedBufferLength != 0)
                {
                    Code   code = (Code)dataReader.ReadInt32();
                    Packet p;
                    switch (code)
                    {
                    case Code.Connected:
                    {
                        Connected = true;
                        p         = null;
                        break;
                    }

                    case Code.Ping:
                    {
                        p = Ping.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Pong:
                    {
                        p = Pong.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.LevelGenerationData:
                    {
                        p = LevelGenData.ConstructPacket(dataReader);
                        send_buffer.Add(new Acknowledge(p.Code));
                        break;
                    }

                    case Code.Acknowledge:
                    {
                        p = Acknowledge.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerCreationData:
                    {
                        p = AddOtherPlayer.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerID:
                    {
                        p = OtherPlayerID.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Input:
                    {
                        p = Input.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.EntityXYCorrection:
                    {
                        p = EntityCorrection.ConstructPacket(dataReader);
                        break;
                    }

                    default: p = null; break;
                    }

                    if (p != null)
                    {
                        receive_buffer.Add(p);
                    }
                    else
                    {
                        Debug.WriteLine("Unrecognized packet " + code);
                        break;
                    }
                }
            }
        }