Пример #1
0
        public void ProcessSynchronousMessages(MessageFrames.Synchronous synchronousFrame, string address)
        {
            object message = synchronousFrame.Message;

            if (message == null) return;
            Type type = message.GetType();

            ProcessReplyHandlers(synchronousFrame, type, message, address);

            SynchronizationContext ctx = ProcessSynchronousHandlers(synchronousFrame, message, address);
        }
Пример #2
0
        private SynchronizationContext ProcessSynchronousHandlers(MessageFrames.Synchronous synchronousFrame, object message, string address)
        {
            SynchronizationContext ctx;

            lock (synchronizationContexts)
            {
                synchronizationContexts.TryGetValue(synchronousFrame.CorrelationId, out ctx);
            }
            if (ctx != null)
            {
                try
                {
                    if (ctx.ResolveFor(message) == true)
                    {

                        lock (synchronizationContexts)
                        {
                            synchronizationContexts.Remove(synchronousFrame.CorrelationId);
                            timeoutHandler.RemoveTimeout(synchronousFrame.CorrelationId);
                        }

                    }
                    else if (ctx.TimedOut == true)
                    {
                        lock (synchronizationContexts)
                        {
                            synchronizationContexts.Remove(synchronousFrame.CorrelationId);
                            timeoutHandler.RemoveTimeout(synchronousFrame.CorrelationId);
                        }
                    }

                }
                catch
                {
                }
            }

            return ctx;
        }
Пример #3
0
        private void ProcessReplyHandlers(MessageFrames.Synchronous synchronousFrame, Type type, object message, string address)
        {
            List<SynchronousBlock> handlers = null;

            lock (replyHandlers)
            {
                replyHandlers.TryGetValue(type, out handlers);
            }
            if (handlers != null)
            {

                foreach (var replyHandler in handlers)
                {
                    SynchronousBlock handler = replyHandler;
                    if (handler.Address == "__BROADCAST" || handler.Address == "__REPLY" || handler.Address == address)
                    {
                        try
                        {
                            Task.Factory.StartNew(() =>
                            {
                                var response = handler.Handler(message);
                                if (response != null)
                                {
                                    var framedResponse = FrameResponseSynchronously(synchronousFrame, response,
                                        synchronousFrame.CorrelationId);
                                    Transport.BusPublish(framedResponse, "__REPLY");
                                }
                            });
                        }
                        catch (Exception ex)
                        {
                            RaiseExceptionEvent(ex);
                        }

                    }
                }

            }
        }
Пример #4
0
 public Sprite GetMessageSkin(MessageFrames frame)
 {
     return(Resources.Load <Sprite>(message_frame_files[(int)frame]));
 }