Ejemplo n.º 1
0
        internal ChannelMessageReader(
            IChannelMessageStream channelMessageStream,
            IChannelMessageSerializer channelMessageSerializer,
            IChannelMessageHandler inboundHandler,
            ITaskLauncher taskLauncher)
        {
            if (channelMessageStream == null)
            {
                throw new ArgumentNullException(nameof(channelMessageStream));
            }
            if (channelMessageSerializer == null)
            {
                throw new ArgumentNullException(nameof(channelMessageSerializer));
            }
            if (inboundHandler == null)
            {
                throw new ArgumentNullException(nameof(inboundHandler));
            }
            if (taskLauncher == null)
            {
                throw new ArgumentNullException(nameof(taskLauncher));
            }

            m_ChannelMessageStream     = channelMessageStream;
            m_ChannelMessageSerializer = channelMessageSerializer;
            m_InboundHandler           = inboundHandler;
            m_TaskLauncher             = taskLauncher;
        }
Ejemplo n.º 2
0
 public void Unsubscribe(string routingKey)
 {
     lock (_AccessLock)
     {
         if (_RoutedMessageHandlers.ContainsKey(routingKey))
         {
             IChannelMessageHandler channelMessageHandler = OperationContext.Current.GetCallbackChannel <IChannelMessageHandler>();
             _Log.Info("Successfully removed client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString() + " from routing key " + routingKey);
             _RoutedMessageHandlers[routingKey].RemoveChannelMessageHandler(channelMessageHandler);
         }
     }
 }
Ejemplo n.º 3
0
        public SlaveTaskManager(IChannelMessageHandler channelMessageHandler)
        {
            _channelMessageHandler = channelMessageHandler;

            _defaultWorker  = Worker.Worker.GetDefaultWorker();
            _slaveCacheList = new ConcurrentDictionary <string, DownTransmission>();
            _slaveCache     = new SlaveCache();

            LoadCache();

            _excuteCalcThread              = new Thread(new ThreadStart(ExcuteCalcThread));
            _excuteCalcThread.Name         = "ExcuteCalcThread";
            _excuteCalcThread.IsBackground = true;
            _excuteCalcThread.Start();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Connects a client to an exchange.
        /// </summary>
        public void Connect()
        {
            IChannelMessageHandler channelMessageHandler = OperationContext.Current.GetCallbackChannel <IChannelMessageHandler>();

            lock (_AccessLock)
            {
                if (!_ConnectedEndpoints.Contains(channelMessageHandler))
                {
                    ((IClientChannel)channelMessageHandler).Faulted += new EventHandler(Exchange_Closed);
                    ((IClientChannel)channelMessageHandler).Closed  += new EventHandler(Exchange_Closed);

                    _ConnectedEndpoints.Add(channelMessageHandler);

                    _Log.Info("Successfully connected to client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString());
                }

                InvokeChannelMessageHandlerAction(p => p.OnAdminMessageReceived(AdminMessageType.ConnectionEstablished, null), channelMessageHandler);
            }
        }
Ejemplo n.º 5
0
        public MasterTaskManager(IChannelMessageHandler channelMessageHandler)
        {
            _channelMessageHandler = channelMessageHandler;

            _winList         = new ConcurrentDictionary <string, IWindowTask>();
            _expList         = new ConcurrentDictionary <string, IExpressionTask>();
            _workList        = new ConcurrentDictionary <string, IWorker>();
            _masterCacheList = new ConcurrentDictionary <string, byte[]>();
            _masterCache     = new MasterCache();
            _context         = new GlobalContext(new ActionBlock <ICalculateContext>(ParallelCalculate, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = GlobalConfig.Config.MaxDegreeOfParallelism
            }));

            LoadCache();

            _remoteInvokeThread              = new Thread(new ThreadStart(RemoteInvokeThread));
            _remoteInvokeThread.Name         = "RemoteInvokeThread";
            _remoteInvokeThread.IsBackground = true;
            _remoteInvokeThread.Start();
        }
Ejemplo n.º 6
0
        private void Disconnect(IChannelMessageHandler channelMessageHandler)
        {
            if (channelMessageHandler != null)
            {
                lock (_AccessLock)
                {
                    if (!_ConnectedEndpoints.Contains(channelMessageHandler))
                    {
                        return;
                    }

                    _Log.Info("Disconnecting client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString());

                    foreach (RoutedMessageHandler RoutedMessageHandler in _RoutedMessageHandlers.Values)
                    {
                        RoutedMessageHandler.RemoveChannelMessageHandler(channelMessageHandler);
                    }

                    _ConnectedEndpoints.Remove(channelMessageHandler);

                    _Log.Info("Client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString() + " disconnected");
                }
            }
        }
Ejemplo n.º 7
0
 public void AddChannelMessageHandler(IChannelMessageHandler channelMessageHandler)
 {
     _MessageHandlers.Add(channelMessageHandler);
 }
Ejemplo n.º 8
0
 public void RemoveChannelMessageHandler(IChannelMessageHandler channelMessageHandler)
 {
     _MessageHandlers.Remove(channelMessageHandler);
 }
Ejemplo n.º 9
0
 private void InvokeChannelMessageHandlerAction(Action <IChannelMessageHandler> action, IChannelMessageHandler channelMessageHandler)
 {
     try
     {
         action.Invoke(channelMessageHandler);
     }
     catch (CommunicationException ex)
     {
         _Log.Error("An error occurred while communicating with the client", ex);
         Disconnect(channelMessageHandler);
     }
     catch (TimeoutException ex)
     {
         _Log.Error("An error occurred while communicating with the server", ex);
         Disconnect(channelMessageHandler);
     }
     catch (Exception ex)
     {
         _Log.Error("An error occurred while communicating with the server", ex);
         Disconnect(channelMessageHandler);
     }
 }
Ejemplo n.º 10
0
 public MasterMessageHandler(IChannelMessageHandler ms)
 {
     _mh = ms;
 }
Ejemplo n.º 11
0
 public SlaveMessageHandler(IChannelMessageHandler mh)
 {
     _mh = mh;
 }