Beispiel #1
0
        public override void OnPluginLoaded()
        {
            Self = this;
            Server.PluginHost.Loaded += OnHostLoadedPlugin;

            this.formatter = new AdvancedClientFormatter();

            foreach (var user in Server.Users)
            {
                user.Socket.Formatter         = formatter;
                user.Extended["CustomFont"]   = null;
                user.Extended["SupportEmote"] = false;
                user.Extended["VoiceIgnore"]  = new List <String>();
                user.Extended["CustomEmote"]  = new List <ClientEmoteItem>();
            }

            foreach (var user in Server.Users)
            {
                OnSendJoin(user);
            }

            var js = Server.PluginHost.Find(s => s.Name.ToLower() == "javascript");

            if (js != null)
            {
                OnHostLoadedPlugin(null, js);
            }

            Server.SendAnnounce("cb0tProtocol plugin has been loaded!!");
        }
Beispiel #2
0
 //called by Listener methods
 protected AresTcpSocket(IPacketFormatter formatter, Socket socket)
     : this()
 {
     should_mask = false;//client sends masked
     Socket      = socket;
     Formatter   = orgFormatter = formatter;
 }
Beispiel #3
0
 protected ClientCommand(int identyfikator, Guid sessionId, ISender sender,
                         IPacketFormatter packetFormatter, Operation operation, Status status)
 {
     _sender          = sender;
     _packetFormatter = packetFormatter;
     Packet           = new Packet(operation, status, sessionId, identyfikator);
 }
Beispiel #4
0
 public ServerSendMessage(ClientData source, ISessionsRepository sessionsRepository,
                          IPacketFormatter packetFormatter, string messageToSend)
     : base(source, sessionsRepository, packetFormatter, Operation.Message, Status.Ok)
 {
     _messageToSend   = messageToSend;
     _sourceSessionId = SessionsRepository.GetSessionId(Source);
 }
Beispiel #5
0
 public ServerInvite(ClientData source, int destinationId, ISessionsRepository sessionsRepository,
                     IPacketFormatter packetFormatter)
     : base(source, sessionsRepository, packetFormatter, Operation.Invite, Status.Ok)
 {
     _destinationId   = destinationId;
     _sourceSessionId = SessionsRepository.GetSessionId(Source);
 }
Beispiel #6
0
 public AresTcpSocket(IPacketFormatter formatter)
 {
     Monitor = new IOMonitor();
     Monitor.Start();
     outQueue  = new ConcurrentQueue <IPacket>();
     Socket    = SocketManager.CreateTcp();
     Formatter = orgFormatter = formatter;
 }
Beispiel #7
0
 public Server(IPacketFormatter packetFormatter, ISessionsRepository sessionsRepository,
               ICommandHandler commandHandler, IClientIdsRepository clientIdsRepository)
 {
     _packetFormatter     = packetFormatter;
     _sessionsRepository  = sessionsRepository;
     _commandHandler      = commandHandler;
     _clientIdsRepository = clientIdsRepository;
 }
Beispiel #8
0
 protected ServerCommand(ClientData source, ISessionsRepository sessionsRepository, IPacketFormatter packetFormatter,
                         Operation operation, Status status)
 {
     Source             = source;
     SessionsRepository = sessionsRepository;
     PacketFormatter    = packetFormatter;
     _operation         = operation;
     _status            = status;
 }
Beispiel #9
0
 public AresUdpSocket(IPacketFormatter formatter)
 {
     Formatter           = formatter;
     Socket              = SocketManager.CreateUdp();
     Monitor             = new IOMonitor();
     recvTask            = new SocketReceiveTask(8192);
     recvTask.Completed += ReceiveComplete;
     sendHandler         = new EventHandler <IOTaskCompleteEventArgs <SocketSendTask> >(SendComplete);
 }
Beispiel #10
0
 //called by Listener methods
 private AresTcpSocket(IPacketFormatter formatter, Socket socket)
 {
     should_mask = false;
     Monitor     = new IOMonitor();
     Monitor.Start();
     outQueue    = new ConcurrentQueue <IPacket>();
     this.Socket = socket;
     Formatter   = orgFormatter = formatter;
 }
Beispiel #11
0
        private object ReadObject(Type type, IPacketFormatter formatter)
        {
            var members = TypeDictionary.GetRecord(type);

            object obj = Activator.CreateInstance(type, true);

            members.ForEach(prop => prop.Property.SetValue(obj, ReadProperty(prop, formatter), null));

            return(obj);
        }
Beispiel #12
0
        private IPacket ReadPacket(IPacketFormatter formatter)
        {
            try {
                ushort len = ReadUInt16();

                if (Remaining < len + 1)
                {
                    throw new EndOfStreamException();
                }

                byte   id      = ReadByte();
                byte[] payload = ReadBytes(len);

                return(formatter?.Unformat(id, payload));
            }
            catch { return(null); }
        }
Beispiel #13
0
        public Packet(byte[] input, int opcode, DateTime time, Direction direction, int number, IPacketFormatter formatter, string fileName)
            : base(new MemoryStream(input, 0, input.Length), Encoding.UTF8)
        {
            Opcode      = opcode;
            Time        = time;
            Direction   = direction;
            Number      = number;
            Formatter   = formatter;
            FileName    = fileName;
            Status      = ParsedStatus.None;
            WriteToFile = true;

            if (number == 0)
            {
                _firstPacketTime = Time;
            }

            TimeSpan = Time - _firstPacketTime;
        }
Beispiel #14
0
        private IPacket ReadPacket(IPacketFormatter formatter, bool len_prefix = true)
        {
            try {
                int len = -1;

                if (len_prefix)
                {
                    len = ReadUInt16();
                }
                if (Remaining < len + 1)
                {
                    throw new EndOfStreamException();
                }

                byte   id      = ReadByte();
                byte[] payload = ReadBytes((len == -1) ? (int)Remaining : len);

                return(formatter?.Unformat(id, payload));
            }
            catch { return(null); }
        }
 public ServerCloseAndOpenNewSessionCommand(ClientData source, ISessionsRepository sessionsRepository,
                                            IPacketFormatter packetFormatter)
     : base(source, sessionsRepository, packetFormatter, Operation.CloseSession, Status.Ok)
 {
 }
Beispiel #16
0
 public ClientDisconnect(int ident, Guid sessionId, ISender sender, IPacketFormatter packetFormatter)
     : base(ident, sessionId, sender, packetFormatter, Operation.Disconnect, Status.Ok)
 {
 }
Beispiel #17
0
 public ClientGetId(int ident, Guid sessionId, ISender sender, IPacketFormatter packetFormatter)
     : base(ident, sessionId, sender, packetFormatter, Operation.GetId, Status.Ok)
 {
 }
Beispiel #18
0
 public Client(IPacketFormatter packetFormatter, ICommandHandler commandHandler)
 {
     _packetFormatter = packetFormatter;
     _commandHandler  = commandHandler;
 }
Beispiel #19
0
 public ServerDeclineInvite(ClientData source, int destinationId, ISessionsRepository sessionsRepository,
                            IPacketFormatter packetFormatter)
     : base(source, sessionsRepository, packetFormatter, Operation.Invite, Status.Decline)
 {
     _destinationId = destinationId;
 }
Beispiel #20
0
 public ServerDisconnect(ClientData source, ISessionsRepository sessionsRepository, IPacketFormatter packetFormatter)
     : base(source, sessionsRepository, packetFormatter, Operation.Disconnect, Status.Ok)
 {
 }
Beispiel #21
0
 public PacketSerializer(IPacketFormatter formatter)
 {
     Formatter = formatter;
 }
Beispiel #22
0
 public AresTcpSocket(IPacketFormatter formatter)
     : this()
 {
     Socket    = SocketManager.CreateTcp();
     Formatter = orgFormatter = formatter;
 }
Beispiel #23
0
 public AresUdpSerializer(IPacketFormatter formatter) :
     base(formatter)
 {
 }
Beispiel #24
0
        public virtual T ReadObject <T>(IPacketFormatter formatter)
        {
            object ret = ReadObject(typeof(T), formatter);

            return((T)(ret ?? default));
        }
Beispiel #25
0
        private object ReadProperty(PropertyData prop, IPacketFormatter formatter)
        {
            switch (Type.GetTypeCode(prop.Property.PropertyType))
            {
            case TypeCode.Boolean:
                if (Remaining < 1 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((bool)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return(false);
                    }
                }

                return(ReadBoolean());

            case TypeCode.Byte:
                if (Remaining < 1 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((byte)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((byte)0);
                    }
                }

                return(ReadByte());

            case TypeCode.SByte:
                if (Remaining < 1 && prop.Attribute.Optional)
                {
                    return((sbyte)0);
                }

                return(ReadSByte());

            case TypeCode.Int16:
                if (Remaining < 2 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((short)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((short)0);
                    }
                }

                return(ReadInt16());

            case TypeCode.UInt16:
                if (Remaining < 2 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((ushort)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((ushort)0);
                    }
                }

                return(ReadUInt16());

            case TypeCode.Int32:
                if (Remaining < 4 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((int)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((int)0);
                    }
                }

                return(ReadInt32());

            case TypeCode.UInt32:
                if (Remaining < 4 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((uint)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((uint)0);
                    }
                }

                return(ReadUInt32());

            case TypeCode.Single:
                if (Remaining < 4 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((float)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((float)0);
                    }
                }

                return(ReadSingle());

            case TypeCode.Int64:
                if (Remaining < 8 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((long)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((long)0);
                    }
                }

                return(ReadInt64());

            case TypeCode.UInt64:
                if (Remaining < 8 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((ulong)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((ulong)0);
                    }
                }

                return(ReadUInt64());

            case TypeCode.Double:
                if (Remaining < 8 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((double)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((double)0);
                    }
                }

                return(ReadDouble());

            case TypeCode.Decimal:
                if (Remaining < 16 && prop.Attribute.Optional)
                {
                    if (prop.Attribute.OptionalValue != null)
                    {
                        return((decimal)prop.Attribute.OptionalValue);
                    }
                    else
                    {
                        return((decimal)0);
                    }
                }

                return(ReadDecimal());

            case TypeCode.String:
                string ret;
                if (prop.Attribute.Length > 0)
                {
                    ret = ReadString(prop.Attribute.Length);
                }
                else if (prop.Attribute.LengthPrefix)
                {
                    ret = ReadString(ReadUInt16());
                }
                else
                {
                    ret = ReadString();
                }

                if (prop.Attribute.MaxLength > 0)
                {
                    byte[] b = Encoding.GetBytes(ret);
                    ret = Encoding.GetString(b, 0, Math.Min(b.Length, prop.Attribute.MaxLength));
                }

                return(ret);

            case TypeCode.Object:
                Type ptype = prop.Property.PropertyType;

                if (ptype == typeof(byte[]))
                {
                    return(ReadBytes((int)Remaining));
                }

                else if (ptype == typeof(Guid))
                {
                    if (Remaining < 16 && prop.Attribute.Optional)
                    {
                        if (prop.Attribute.OptionalValue != null)
                        {
                            return((Guid)prop.Attribute.OptionalValue);
                        }
                        else
                        {
                            return(Guid.Empty);
                        }
                    }

                    return(ReadGuid());
                }
                else if (ptype == typeof(IPAddress))
                {
                    if (Remaining < 4 && prop.Attribute.Optional)
                    {
                        if (prop.Attribute.OptionalValue != null)
                        {
                            return((IPAddress)prop.Attribute.OptionalValue);
                        }
                        else
                        {
                            return(IPAddress.Any);
                        }
                    }

                    return(ReadIPAddress());
                }
                else if (typeof(IPacket).IsAssignableFrom(ptype))
                {
                    if (Remaining >= 3)
                    {
                        return(ReadPacket(formatter));
                    }
                }

                throw new NotSupportedException("This data type is not supported by the serializer");
            }

            return(null);
        }
Beispiel #26
0
 public AresUdpSocket(IPacketFormatter formatter)
 {
     Formatter = formatter;
     Socket    = SocketManager.CreateUdp();
     Monitor   = new IOMonitor();
 }
Beispiel #27
0
 public ClientCloseAndOpenNewSessionCommand(int ident, Guid sessionId, ISender sender, IPacketFormatter packetFormatter)
     : base(ident, sessionId, sender, packetFormatter, Operation.CloseSession, Status.Ok)
 {
 }
Beispiel #28
0
 public ClientInvite(int ident, int destinationId, Guid sessionId, ISender sender, IPacketFormatter packetFormatter)
     : base(ident, sessionId, sender, packetFormatter, Operation.Invite, Status.Ok)
 {
     Packet.SetDestinationId(destinationId);
 }
Beispiel #29
0
 public ServerGetId(ClientData source, ISessionsRepository sessionsRepository, IPacketFormatter packetFormatter)
     : base(source, sessionsRepository, packetFormatter, Operation.GetId, Status.Ok)
 {
 }
Beispiel #30
0
 public ClientSendMessage(int ident, Guid sessionId, ISender sender,
                          IPacketFormatter packetFormatter, string messageToSend)
     : base(ident, sessionId, sender, packetFormatter, Operation.Message, Status.Ok)
 {
     Packet.SetMessage(messageToSend);
 }