Ejemplo n.º 1
0
        private void SocketService()
        {
            UserPool.Init();

            this.tcp_listener = new TcpListener(new IPEndPoint(IPAddress.Any, (int)Settings.Get <ushort>("port")));
            this.tcp_listener.Start();

            uint  last_time       = Misc.UnixTime;
            ulong fast_ping_timer = Misc.Now;

            while (true)
            {
                ulong time = Misc.Now;
                if (!this.Running)
                {
                    return;
                }

                if (time > (fast_ping_timer + 2000))
                {
                    fast_ping_timer = time;
                    UserPool.Users.ForEach(x => { x.SendPacket(AresTcpPackets.FastPing()); });
                    Avatars.CheckAvatars();
                }

                uint time_now = Misc.UnixTime;
                this.CheckDisponse(time_now);
                this.ServiceUsers(time_now);
                ServerEvents.CycleTick();
                Thread.Sleep(25);
            }
        }
Ejemplo n.º 2
0
        public static void SendUserList(UserObject userobj)
        {
            userobj.SendPacket(AresTcpPackets.UserListBotItem());
            Users.ForEach(x => { if (x.LoggedIn && x.Vroom == userobj.Vroom)
                                 {
                                     userobj.SendPacket(AresTcpPackets.UserListItem(x));
                                 }
                          });
            userobj.SendPacket(AresTcpPackets.UserListEnd());

            Users.ForEach(x =>
            {
                if (x.LoggedIn && x.Vroom == userobj.Vroom)
                {
                    if (x.Avatar.Length > 0)
                    {
                        userobj.SendPacket(AresTcpPackets.Avatar(x));
                    }

                    if (!String.IsNullOrEmpty(x.PersonalMessage))
                    {
                        userobj.SendPacket(AresTcpPackets.PersonalMessage(x));
                    }
                }
            });
        }
Ejemplo n.º 3
0
 public static void UpdateServerAvatar(byte[] data)
 {
     server_avatar = Scale(data);
     if (UserPool.Users != null)
     {
         UserPool.Users.ForEach(x => { x.SendPacket(AresTcpPackets.BotAvatar(server_avatar)); });
     }
 }
Ejemplo n.º 4
0
 internal static byte[] Server(UserObject client)
 {
     if (server_avatar == null)
     {
         return(AresTcpPackets.BotAvatarCleared(client));
     }
     else
     {
         return(AresTcpPackets.BotAvatar(client, server_avatar));
     }
 }
Ejemplo n.º 5
0
        public void Disconnect()
        {
            this.SendPending();
            this.TerminateSocket();
            this.Expired = true;
            this.stack.Disponse();

            if (this.LoggedIn)
            {
                this.LoggedIn = false;
                ServerEvents.OnPart(this);
                UserPool.BroadcastToVroom(this.Vroom, AresTcpPackets.Part(this));
            }
        }
Ejemplo n.º 6
0
        public static void Evaluate(UserObject userobj, ProtoMessage msg, AresTCPPacketReader packet, uint time)
        {
            UserPool.Broadcast(AresTcpPackets.NoSuch(msg.ToString()));
            if (!userobj.LoggedIn)
            {
                if (msg > ProtoMessage.MSG_CHAT_CLIENT_LOGIN)
                {
                    throw new Exception();
                }
            }
            switch (msg)
            {
            case ProtoMessage.MSG_CHAT_CLIENT_LOGIN:
                Login(userobj, packet, time);
                break;

            case ProtoMessage.MSG_CHAT_CLIENT_PUBLIC:
                PublicText(userobj, packet);
                break;

            case ProtoMessage.MSG_CHAT_CLIENT_AVATAR:
                Avatar(userobj, packet);
                break;

            case ProtoMessage.MSG_CHAT_CLIENT_PERSONAL_MESSAGE:
                String text = packet.ReadString();
                if (ServerEvents.OnPersonalMessage(userobj, text))
                {
                    userobj.PersonalMessage = text;
                }
                break;

            case ProtoMessage.MSG_CHAT_CLIENT_UPDATE_STATUS:

                break;

            case ProtoMessage.MSG_CHAT_SERVER_UPDATE_USER_STATUS:
                userobj.LastFastPing = time;
                AresTcpPackets.UpdateUserStatus(userobj, userobj);
                break;

            case ProtoMessage.MSG_CHAT_CLIENT_COMMAND:
                //Command(userobj, packet.ReadString());
                break;
            }
        }
Ejemplo n.º 7
0
        public static void SendUserFeatures(UserObject userobj)
        {
            Users.ForEach(x =>
            {
                if (x.LoggedIn && x.Vroom == userobj.Vroom && x.ID != userobj.ID)
                {
                    if (userobj.Avatar.Length > 0)
                    {
                        x.SendPacket(AresTcpPackets.Avatar(userobj));
                    }

                    if (!String.IsNullOrEmpty(userobj.PersonalMessage))
                    {
                        x.SendPacket(AresTcpPackets.PersonalMessage(userobj));
                    }
                }
            });
        }
Ejemplo n.º 8
0
        private static void Login(UserObject userobj, AresTCPPacketReader packet, uint time)
        {
            userobj.PopulateCredentials(packet);
            if (!ServerEvents.OnJoinCheck(userobj))
            {
                userobj.Expired  = true;
                userobj.LoggedIn = userobj.Ghost;
            }
            if (!userobj.Ghost)
            {
                UserPool.BroadcastToVroom(userobj.Vroom, AresTcpPackets.Join(userobj));
            }

            userobj.LoggedIn = true;
            userobj.SendPacket(AresTcpPackets.LoginAck(userobj));
            userobj.SendPacket(AresTcpPackets.MyFeatures(userobj));
            userobj.SendPacket(AresTcpPackets.TopicFirst());
            UserPool.SendUserList(userobj);
            userobj.SendPacket(AresTcpPackets.OpChange(userobj));
            userobj.SendPacket(Avatars.Server(userobj));
            ServerEvents.OnJoin(userobj);
        }
Ejemplo n.º 9
0
        private static void PublicText(UserObject userobj, AresTCPPacketReader packet)
        {
            String text = packet.ReadString();

            //UserPool.Users.ForEach(x => { x.SendPacket(AresTcpPackets.Public(userobj.Name, text)); });
            UserPool.Users.ForEach(x => {
                if (x.LoggedIn && x.Vroom == userobj.Vroom)
                {
                    if (!x.Ignores.Contains(userobj.Name))
                    {
                        x.SendPacket(AresTcpPackets.NoSuch(userobj.Avatar.Length.ToString()));
                        if (String.IsNullOrEmpty(userobj.CustomName))
                        {
                            x.SendPacket(AresTcpPackets.Public(userobj.Name, text));
                        }
                        else
                        {
                            x.SendPacket(AresTcpPackets.NoSuch(userobj.CustomName + text));
                        }
                    }
                }
            });
        }