示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
 internal static void SendWelcomeMessage(Client pClient)
 {
     Packet packet = new Packet(EOpcode.SMSG_WELCOME_MESSAGE);
     packet.WriteString (Config.Instance.WelcomeMessage);
     pClient.SendPacket (packet);
 }
示例#5
0
 internal static void SendPacketToAllExcept(Packet pPacket, Client pExcept)
 {
     sClients.ForEach(p => { if (p != pExcept) p.SendPacket(pPacket); });
 }
示例#6
0
 internal static void ClientDisconnected(Client pClient)
 {
     lock (sClients) sClients.Remove(pClient);
 }
示例#7
0
 internal static void ClientConnected(Client pClient)
 {
     SendUniqueName (pClient);
     SendWelcomeMessage (pClient);
 }
示例#8
0
        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);
            }
        }
示例#9
0
        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);
        }