コード例 #1
0
        public override void Callback(IAsyncResult result)
        {
            if (_proxy.IsRunning)
            {
                _proxy.Socket = (ProxySocket)result.AsyncState;

                Socket _client_socket = _proxy.Socket.EndAccept(result);

                ClientEntity client = _client_creator.Handle(_client_socket.RemoteEndPoint as IPEndPoint);
                client = _client_linker.Handle(client, _client_socket);

                ClientEntity remote = _client_creator.Handle(_proxy.IpRedirectedStack.Dequeue());
                remote = _client_linker.Handle(remote, new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp));
                AbstractClientReceiveCallback remote_rcv_callback = new AbstractClientReceiveCallback(remote, client, _client_repository, _client_creator, _client_linker, _client_connector, _client_disconnector, _client_sender, ProxyTagEnum.Server);
                remote = _client_connector.Handle(remote, new ClientConnectCallback(remote, remote_rcv_callback));

                // wait remote client to connect
                while (!remote.IsRunning)
                {
                    ;
                }

                client = _client_receiver.Handle(client, new AbstractClientReceiveCallback(client, remote, _client_repository, _client_creator, _client_linker, _client_connector, _client_disconnector, _client_sender, ProxyTagEnum.Client));

                logger.Info("client connected");

                _proxy.Socket.BeginAccept(Callback, _proxy.Socket);
            }
        }
コード例 #2
0
ファイル: MessageHandler.cs プロジェクト: Sehyn/AivyCore
        public async Task <bool> Handle(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
        {
            IEnumerable <Type> _handlers = _handlers_type.Where(x => x.GetCustomAttribute <Attribute>().BaseMessage.protocolID == element.protocolID);
            bool _all_true = true;

            foreach (Type _handler in _handlers)
            {
                _all_true = _all_true && await _handle(_handler, callback, element, content);
            }
            return(_all_true);
        }
コード例 #3
0
ファイル: MessageHandler.cs プロジェクト: Sehyn/AivyCore
        private async Task <bool> _handle(Type handler_type, AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
        {
            if (!GetHandler(element.protocolID))
            {
                return(true);
            }
            if (handler_type is null)
            {
                return(true);
            }

            AbstractMessageHandler handler = Activator.CreateInstance(handler_type, new object[] { callback, element, content }) as AbstractMessageHandler;

            await AsyncExtension.ExecuteAsync(handler.Handle, handler.EndHandle, handler.Error);

            return(handler.IsForwardingData);
        }
コード例 #4
0
        private bool _handle(Type handler_type, AbstractClientReceiveCallback callback, string package)
        {
            //if (!GetHandler(element.protocolID)) return true;
            if (handler_type is null)
            {
                return(true);
            }

            var DofusProxyCallback = (callback as DofusRetroProxyClientReceiveCallback);

            AbstractMessageHandler handler = Activator.CreateInstance(handler_type, new object[] { callback, package, DofusProxyCallback.Account }) as AbstractMessageHandler;

            try
            {
                handler.Handle();
                handler.EndHandle();
            }
            catch (Exception e)
            {
                handler.Error(e);
            }

            return(handler.IsForwardingData);
        }
コード例 #5
0
 public AbstractMessageHandler(AbstractClientReceiveCallback callback, string package, Account account)
 {
     _callback = callback ?? throw new ArgumentNullException(nameof(callback));
     _package  = package;
     _account  = account;
 }
コード例 #6
0
 public CharacterCreationRequestMessageHandler(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #7
0
 public IdentificationSuccessMessageHandler(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #8
0
 public AbstractMessageHandler(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
 {
     _callback = callback ?? throw new ArgumentNullException(nameof(callback));
     _element  = element ?? throw new ArgumentNullException(nameof(element));
     _content  = content ?? throw new ArgumentNullException(nameof(content));
 }
コード例 #9
0
 public AuthenticationTicketMessageHandler(AbstractClientReceiveCallback callback,
                                           NetworkElement element,
                                           NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #10
0
 public ExchangeStartedWithStorageMessageHandler(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
     : base(callback, element, content)
 {
 }
 public InteractiveStateMessageHandler(AbstractClientReceiveCallback callback, string package, Account account) : base(callback, package, account)
 {
 }
コード例 #12
0
 public MapComplementaryInformationsDataMessageHandler(AbstractClientReceiveCallback callback,
                                                       NetworkElement element,
                                                       NetworkContentElement content)
     : base(callback, element, content)
 {
 }
 public ReloginTokenRequestMessageHandler(AbstractClientReceiveCallback callback,
                                          NetworkElement element,
                                          NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #14
0
 public bool Handle(AbstractClientReceiveCallback callback, string package)
 {
     return(_handle(_handlers_type.FirstOrDefault(x => package.StartsWith(x.GetCustomAttribute <Attribute>().BaseMessage)), callback, package));
 }
コード例 #15
0
 public CharacterSkillsMessageHandler(AbstractClientReceiveCallback callback, string package, Account account) : base(callback, package, account)
 {
 }
コード例 #16
0
 public FightInfoStatsMessageHandler(AbstractClientReceiveCallback callback, string package, Account account) : base(callback, package, account)
 {
 }
コード例 #17
0
 public ServersListMessageHandler(AbstractClientReceiveCallback callback,
                                  NetworkElement element,
                                  NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #18
0
 public ProtocolRequiredHandler(AbstractClientReceiveCallback callback, NetworkElement element, NetworkContentElement content)
     : base(callback, element, content)
 {
 }
コード例 #19
0
 public MapDataMessageHandler(AbstractClientReceiveCallback callback, string package, Account account) : base(callback, package, account)
 {
 }
コード例 #20
0
 public FightChangePositionMessageHandler(AbstractClientReceiveCallback callback, string package, Account account) : base(callback, package, account)
 {
 }