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); } }
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)); } } }); }
public static void UpdateServerAvatar(byte[] data) { server_avatar = Scale(data); if (UserPool.Users != null) { UserPool.Users.ForEach(x => { x.SendPacket(AresTcpPackets.BotAvatar(server_avatar)); }); } }
internal static byte[] Server(UserObject client) { if (server_avatar == null) { return(AresTcpPackets.BotAvatarCleared(client)); } else { return(AresTcpPackets.BotAvatar(client, server_avatar)); } }
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)); } }
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; } }
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)); } } }); }
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); }
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)); } } } }); }