コード例 #1
0
        public static void CollectStatesFromClient(object udpClientObject)
        {
            byte[]    data_recv        = new byte[2];
            UdpClient udpServerReceive = (UdpClient)udpClientObject;

            IPEndPoint remote_ip_endpoint_send = new IPEndPoint(IPAddress.Any, port_client_out);

            while (true)
            {
                data_recv = udpServerReceive.Receive(ref remote_ip_endpoint_send);
                Console.WriteLine("Received " + (byte)data_recv[1] + " from " + (char)data_recv[0] + " (" + ((EndPoint)remote_ip_endpoint_send).ToString() + ")");

                Client_message msg = new Client_message
                {
                    id      = (char)data_recv[0],
                    val     = data_recv[1],
                    address = remote_ip_endpoint_send.Address
                };

                if (!clients.Contains(remote_ip_endpoint_send.Address))
                {
                    lock (clients)
                    {
                        clients.Add(remote_ip_endpoint_send.Address);
                    }
                }

                lock (client_message_list)
                {
                    client_message_list.Add(msg);
                }
            }
        }
コード例 #2
0
        private byte[] processClientMessage(Client_operation op, Client_message packet, byte[] message)
        {
            var size = sizeof(Byte) + sizeof(Int32) + (message != null ? message.Length : 0);

            var response = new byte[size];

            using (var mem = new MemoryStream(response)) {
                var bw = new BinaryWriter(mem);

                bw.Write((byte)op);
                bw.Write((Int32)packet);
                if (message != null)
                {
                    bw.Write(message);
                }
            }

            return(response);
        }
コード例 #3
0
        /// <summary>
        /// Processing packet
        /// </summary>
        /// <param name="packet"> return response to recived packet</param>
        /// <returns></returns>
        private byte[] ProcessPacket(object packet)
        {
            if (packet is LoginPacket)
            {
                LoginPacket pack = (LoginPacket)packet;
                if (LoginUser(pack.login, pack.password))
                {
                    lock (loggedInUsers) {
                        LoginPacket gt;

                        if (loggedInUsers.TryGetValue(pack.login, out gt))
                        {
                            return(processClientMessage(Client_operation.M_SEND_MESSAGE, Client_message.M_LOGIN_LOCKED, null));
                        }

                        loggedInUsers.Add(pack.login, pack);
                    }

                    return(GetCharacterList(pack));
                }

                return(processClientMessage(Client_operation.M_SEND_MESSAGE, Client_message.M_INVALID_LOGIN_PASSWORD, null));
            }

            if (packet is Client_message)
            {
                Client_message mess = (Client_message)packet;
                return(processClientMessage(Client_operation.M_CHECK_NICKNAME, mess, null));
            }

            if (packet is Client_operation)
            {
                return(GetServersList());
            }

            return(new byte[0]);
        }