public static void UsernameChange(Client pClient, Packet pPacket) { string username; pPacket.ReadString (out username); Log.WriteLine (ELogLevel.Info, "[Server] Username change request recevied: {0} -> {1}", pClient.Username, username); Server.UpdateUsername (pClient, username); }
public static void ChatMessage(Client pClient, Packet pPacket) { string message; pPacket.ReadString (out message); Log.WriteLine (ELogLevel.Info, "[Server] Received Chat Message: {0}", message); Packet packet = new Packet(EOpcode.SMSG_CHAT_MESSAGE); packet.WriteString (pClient.Username); packet.WriteString(message); Server.SendPacketToAllExcept (packet, pClient); }
internal static void SendUniqueName(Client pClient) { int counter = pClient.Identifier; // Ensure the new user has a unique name while(sClients.Any (c => c.Username.Equals ("user_" + counter, StringComparison.CurrentCulture))) { counter++; } UpdateUsername (pClient, "user_" + counter); }
internal static void SendWelcomeMessage(Client pClient) { Packet packet = new Packet(EOpcode.SMSG_WELCOME_MESSAGE); packet.WriteString (Config.Instance.WelcomeMessage); pClient.SendPacket (packet); }
internal static void SendPacketToAllExcept(Packet pPacket, Client pExcept) { sClients.ForEach(p => { if (p != pExcept) p.SendPacket(pPacket); }); }
internal static void ClientDisconnected(Client pClient) { lock (sClients) sClients.Remove(pClient); }
internal static void ClientConnected(Client pClient) { SendUniqueName (pClient); SendWelcomeMessage (pClient); }
private static void EndListenerAccept(SocketAsyncEventArgs pArguments) { try { if (pArguments.SocketError == SocketError.Success) { Client client = new Client (pArguments.AcceptSocket, sClientIdCounter); sClientIdCounter++; lock (sClients) { sClients.Add (client); } client.SendHandshake(Config.Instance.Build); ClientConnected(client); BeginListenerAccept (pArguments); } else if (pArguments.SocketError != SocketError.OperationAborted) Log.WriteLine (ELogLevel.Error, "[Server] Listener Error: {0}", pArguments.SocketError); } catch (ObjectDisposedException) { } catch (Exception exc) { Log.WriteLine (ELogLevel.Exception, "[Server] Listener Exception: {0}", exc.Message); } }
internal static void UpdateUsername(Client pClient, string pUsername) { bool success = true; if (sClients.Any (c => c.Username.Equals (pUsername, StringComparison.CurrentCulture))) { success = false; } Packet packet = new Packet(EOpcode.SMSG_UPDATE_USERNAME); packet.WriteBool (success); if (success) { packet.WriteString (pUsername); pClient.Username = pUsername; } Log.WriteLine (ELogLevel.Info, "Sending Uusername: {0}", pUsername); pClient.SendPacket (packet); }