示例#1
0
 public static void HandlePacketPong(Client client, Net.Paket.PongPaket pp)
 {
     if(pp.Message == Settings.Default.ServerName)
     {
         client._nextActivityCheck = DateTime.Now + TimeSpan.FromSeconds(30);
     }
 }
示例#2
0
 public static void HandlePacketUser(Client client, Net.Paket.UserPaket up)
 {
     client.ClientInfo.Username = up.Username;
     client.ClientInfo.RealName = up.RealName;
     client.ClientInfo.Host = up.Hostname;
     if(client.ClientInfo.Nickname != null)
     {
         client.ClientInfo.IsRegistered = true;
         RegisterUser(client);
     }
 }
示例#3
0
        public static void HandlePacketNick(Client client, Net.Paket.NickPaket np)
        {
            var nickClient = client.Server.GetClientByNickname(np.Nickname.ToUpper());
            if(nickClient != null)
            {
                client.SendPacket(new NickNameInUseResponse {NickName = np.Nickname});
                return;
            }

            client.ClientInfo.Nickname = np.Nickname;
            client.Server.Nicknames.Add(np.Nickname.ToUpper(), client);
            RegisterUser(client);
        }
示例#4
0
 private static void RegisterUser(Client client)
 {
     if(client.ClientInfo.IsRegistered && client.ClientInfo.Nickname != null)
         client.SendPacket(new WelcomeResponse {Host = client.ClientInfo.Host, Nickname = client.ClientInfo.Nickname, Username = client.ClientInfo.Username});
 }
示例#5
0
        private void AcceptProcess(SocketAsyncEventArgs e)
        {
            if (OnBeforeAccept(e.AcceptSocket))
            {
                Interlocked.Increment(ref _nextSessionId);
                var c = new Client(_nextSessionId, this, e.AcceptSocket);

                c.Start();

                AddClient(c);
                Logger.Log(Logger.LogLevel.Info, "Clients online: {0}", Clients.Count);
            }
            else
            {
                if (e.AcceptSocket.Connected)
                    e.AcceptSocket.Shutdown(SocketShutdown.Both);
                e.AcceptSocket.Close();
            }
            _acceptEventArgs.AcceptSocket = null;
            Interlocked.Exchange(ref _asyncAccepts, 0);
            NetworkSignal.Set();
        }
示例#6
0
 public void DisconnectClient(Client client)
 {
     Clients.TryRemove(client.SessionId, out client);
     client = null;
 }
示例#7
0
 public void AddClient(Client client)
 {
     Clients.TryAdd(client.SessionId, client);
     Interlocked.Increment(ref _clientDictChanges);
 }