Exemplo n.º 1
0
        private void HandleData(DataInterceptedEventArgs e)
        {
            ModuleItem[] moduleItems = Contractor.GetModuleItems();
            bool         isOutgoing  = (e.Packet.Destination == HDestination.Server);

            foreach (ModuleItem moduleItem in moduleItems)
            {
                if (!moduleItem.IsInitialized)
                {
                    continue;
                }

                ITExtension extension = moduleItem.Extension;
                if (extension == null)
                {
                    continue;
                }

                try
                {
                    if (isOutgoing)
                    {
                        extension.HandleOutgoing(e);
                        extension.Triggers?.HandleOutgoing(e);
                    }
                    else
                    {
                        extension.HandleIncoming(e);
                        extension.Triggers?.HandleIncoming(e);
                    }
                }
                catch (Exception ex)
                {
                    if (!e.HasContinued)
                    {
                        e.Continue();
                    }

                    WriteLog(ex);
                    DisplayModuleException(moduleItem, e, ex);
                }
            }
        }
Exemplo n.º 2
0
        private void HandleData(DataInterceptedEventArgs e)
        {
            ModuleItem[] moduleItems = Contractor.GetModuleItems();
            bool         isOutgoing  = (e.Packet.Destination == HDestination.Server);

            if (Contractor.RemoteModule != null)
            {
                string stamp = DateTime.Now.Ticks.ToString();
                stamp += isOutgoing;
                stamp += e.Step;

                Contractor.DataAwaiters[stamp] =
                    new TaskCompletionSource <DataInterceptedEventArgs>();

                var interceptedData = new HMessage((ushort)(e.Packet.Destination + 4));
                interceptedData.WriteString(stamp);
                interceptedData.WriteInteger(e.Step);
                interceptedData.WriteBoolean(e.IsBlocked);
                interceptedData.WriteInteger(e.Packet.Length + 4);
                interceptedData.WriteBytes(e.Packet.ToBytes());
                Contractor.RemoteModule.SendAsync(interceptedData);

                DataInterceptedEventArgs args = Contractor
                                                .DataAwaiters[stamp].Task.Result;

                if (args != null)
                {
                    e.Packet    = args.Packet;
                    e.IsBlocked = args.IsBlocked;
                }
                Contractor.DataAwaiters.Remove(stamp);
            }

            foreach (ModuleItem moduleItem in moduleItems)
            {
                if (!moduleItem.IsInitialized)
                {
                    continue;
                }

                ITExtension extension = moduleItem.Extension;
                if (extension == null)
                {
                    continue;
                }

                try
                {
                    if (isOutgoing)
                    {
                        extension.HandleOutgoing(e);
                        extension.Triggers?.HandleOutgoing(e);
                    }
                    else
                    {
                        extension.HandleIncoming(e);
                        extension.Triggers?.HandleIncoming(e);
                    }
                }
                catch (Exception ex)
                {
                    if (!e.HasContinued)
                    {
                        e.Continue();
                    }

                    WriteLog(ex);
                    DisplayModuleException(moduleItem, e, ex);
                }
            }
        }