コード例 #1
0
        protected virtual void ClientDisconnected(object sender, DisconnectEventArgs e)
        {
            AresClient user = null;

            var socket = sender as ISocket;

            if (socket == null)
            {
                return;
            }

            lock (pending)
                pending.RemoveAll((s) => s.Equals(socket));

            lock (users.SyncRoot) {
                int uindex = users.FindIndex(s => s.Socket == sender);
                if (uindex == -1)
                {
                    return;
                }

                user = (AresClient)users[uindex];
                users.RemoveAt(uindex);
            }

            if (user.LoggedIn)
            {
                history.Add(user);

                SendPacket((s) =>
                           !s.Guid.Equals(user.Guid) && //ghost?
                           s.Vroom == user.Vroom,
                           new Parted(user.Name));
            }

            plugins.OnPart(user, e.UserToken);

            idpool.Push(user.Id);
            user.Dispose();
        }