Exemplo n.º 1
0
        /// <summary>
        /// Tells the client to create a player for the context ID.
        /// </summary>
        /// <param name="SendTo"></param>
        /// <param name="PlayerID"></param>
        public static void CreatePlayer(ClientContext SendTo, int PlayerID)
        {
            var b    = BitConverter.GetBytes(PlayerID);
            var send = DSPacket.Format(Command.CLIENT_CREATEPLAYER, b);

            SendPacketToClient(SendTo, send);
            WriteLine($"Player created on context: {SendTo.ID}, for ID: {PlayerID}");
        }
        /// <summary>
        /// Client tells the server that the player has navigated to a specific point.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="data"></param>
        public static void PlayerNavigated(ClientContext context, byte[] data)
        {
            var b = DSPacket.Format(Command.PLAYER_NAVIGATE, data);

            BroadcastPacket(b);
            var x = BitConverter.ToInt32(data, 4);
            var y = BitConverter.ToInt32(data, 8);

            WriteLine($"Client: {context.ID} Navigates to X:{x}, Y:{y}");
        }
Exemplo n.º 3
0
 /// <summary>
 /// Sends the current level to client, forcing it to update it's level.
 /// </summary>
 /// <param name="context"></param>
 public static void SendLevel(ClientContext context)
 {
     if (SERVER_LevelFile == null)
     {
         WriteLine("A LevelSave is not present and therefore the SendLevel command was aborted.");
         return;
     }
     WriteLine($"Sending level data to context: {context.ID}");
     SendPacketToClient(context, DSPacket.Format(Command.LEVEL_LEVELCHANGED, SERVER_LevelFile));
 }
Exemplo n.º 4
0
        /// <summary>
        /// Client sent the server that it was interacting with an object.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="data"></param>
        public static void PlayerInteracted(ClientContext context, byte[] data)
        {
            var b = DSPacket.Format(Command.PLAYER_INTERACT, data);

            BroadcastPacket(b);
            var x = BitConverter.ToInt32(data, 0);
            var y = BitConverter.ToInt32(data, 4);

            WriteLine($"Player: {x}, Interacts with Object: {y}");
        }
Exemplo n.º 5
0
        /// <summary>
        /// The client tells the server that it has seated a person at a table.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="data"></param>
        public static void PersonSeated(ClientContext context, byte[] data)
        {
            var b = DSPacket.Format(Command.PERSON_SEAT, data);

            BroadcastPacket(b, BroadcastAudience.All); //Tell all clients to seat a person at table ID in seat ID.
            var SenderID = BitConverter.ToInt32(data, 0);
            var pID      = BitConverter.ToInt32(data, 4);
            var table    = BitConverter.ToInt32(data, 8);

            WriteLine($"Player: {SenderID}, Seats Person: {pID} at Table: {table}");
        }
        public static void BroadcastGameStart()
        {
            var packet = DSPacket.Format(Command.HOST_STARTGAME, new byte[0]);

            BroadcastPacket(packet);
        }
Exemplo n.º 7
0
        void ProcessMessage(int MessageBufferSize)
        {
            byte[] buffer = new byte[MessageBufferSize];
            context.Message.Position = 0;
            context.Message.Read(buffer, 0, MessageBufferSize);

            string message = "NO MESSAGE FORMATTED";
            var    packets = DSPacket.Unfold(buffer);

            if (packets is null)
            {
                return;
            }
            var completed = new List <DSPacket>();

            foreach (var packet in packets)
            {
                if (!packet.HasEnd && !_waitingForCompletePacket)
                {
                    BasePacket = packet;
                    _waitingForCompletePacket = true;
                    continue;
                }
                if (!packet.HasBegin && _waitingForCompletePacket)
                {
                    var Packet = DSPacket.Merge(packet, BasePacket);
                    if (Packet.HasEnd)
                    {
                        _waitingForCompletePacket = false;
                        Server.WriteLine("[Client] Completed Packet Receieved: " + packet.data.Length);
                        completed.Add(Packet);
                    }
                    else
                    {
                        BasePacket = Packet;
                    }
                }
                else
                {
                    completed.Add(packet);
                }
            }
            foreach (var Packet in completed)
            {
                switch ((Command)Packet.ServerCommand)
                {
                case Command.SERVER_SHUTDOWN:     //Server shutting down
                {
                    var r = Encoding.ASCII.GetString(Packet.data);
                    int.TryParse(r.Substring(0, r.IndexOf('|')), out int id);
                    r = r.Remove(0, r.IndexOf('|') + 1);
                    Server.WriteLine($"{id} disconnected from the server because: {r}");
                    DisconnectedFromGame?.Invoke(id, r);
                }
                break;

                case Command.CLIENT_KICK:     //Someone Kicked
                {
                    var r = Encoding.ASCII.GetString(Packet.data);
                    int.TryParse(r.Substring(0, r.IndexOf('|')), out int id);
                    r = r.Remove(0, r.IndexOf('|') + 1);
                    Server.WriteLine($"{id} has been kicked from the server because: {r}");
                    RemovedFromMatch?.Invoke(id, r);
                }
                break;

                case Command.LEVEL_LEVELCHANGED:     //Switch Level
                    Server.WriteLine("Server forcing level change. Size: " + Packet.data.Length);
                    ReceiveLevel(Packet.data);
                    break;

                case Command.CLIENT_IDCHANGE:     //ID changed
                    if (Packet.data.Length > 1)
                    {
                        Server.WriteLine("Command Formatting is incorrect: No <byte> in byte array.");
                        return;
                    }
                    context.ID = Packet.data[0];
                    break;

                case Command.CLIENT_CREATEPLAYER:     //Create player for ClientContext
                    CreatePlayer(Packet.data);
                    break;

                case Command.PLAYER_NAVIGATE:     //Player navigates to a position
                    PlayerNavigate(Packet.data);
                    break;

                case Command.CLIENT_MESSAGE_ALL:     //Textmessage
                    message = Encoding.ASCII.GetString(Packet.data);
                    string sender = message.Substring(0, message.IndexOf('|'));
                    message = message.Substring(message.IndexOf('|') + 1);
                    OnMessageReceived?.Invoke(sender, message);
                    Server.WriteLine($"{sender}: {message}");
                    break;

                case Command.PLAYER_INTERACT:     //Player interacts with an object
                    PlayerInteract(Packet.data);
                    break;

                case Command.PERSON_SEAT:
                    PersonSeated(Packet.data);
                    break;

                case Command.HOST_STARTGAME:     //Host start game
                    HostStartedGame?.Invoke(context.ID);
                    break;
                }
            }
            PrepareForNextMessage();
        }
Exemplo n.º 8
0
 public void RequestLevelChange(byte[] LevelData)
 {
     SendPacketToServer(DSPacket.Format(Commands.Command.LEVEL_NEWLEVEL, LevelData));
 }
Exemplo n.º 9
0
 /// <summary>
 /// Tells every client to change the level to the currently stored level in the Server.
 /// </summary>
 public static void BroadcastSendLevel()
 {
     BroadcastPacket(DSPacket.Format(Command.LEVEL_LEVELCHANGED, SERVER_LevelFile));
 }