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); } } }
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); }
/// <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]); }