Пример #1
0
        void ZNodeManager_NodeWhisperEvent(object sender, ZyreEventWhisper e)
        {
            try
            {
                var eventData = e.ConvertTo<ZNodeEntry>();
                var commandInfo = DLiteUtil.Analyze(eventData.Command);
                var args = eventData.Entry as object[];
                object obj = this;

                if (!commandInfo.Provider.Equals(Name))
                {
                    obj = GetCollection(commandInfo.Provider); ;
                }

                var method = obj.FindMethod(commandInfo.Action, ref args);
                if (method == null) return;

                var key = DLiteUtil.BuildKey(new object[] { eventData.Command }.Concat(args));
                DLiteUtil.OffRaiser(key);
                method.Invoke(obj, args);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Пример #2
0
        private void ZyreWhisperEvent(object sender, ZyreEventWhisper e)
        {
            var msg       = e.Content.Pop().ConvertToString();
            var uuidShort = e.SenderUuid.ToShortString6();
            var str       = $"Whisper from {uuidShort}: {msg}";

            UpdateMessageReceived(str);
            EventsLogger($"Whisper: {e.SenderName} {e.SenderUuid.ToShortString6()} whispered message {msg}");
        }
Пример #3
0
        private void ZyreWhisperEvent(object sender, ZyreEventWhisper e)
        {
            // Receive a message which is sent point-to-point from a peer to this node
            // We do not currently differentiate between messages which are whispered or shouted
            if (_mapper == null)
            {
                return;
            }

            var envelope = _mapper.Map(e.Content);

            // TODO: Handle proxy cases, where we are receiving the message as a proxy, and need
            // to forward it on to the actual destination.

            MessageReceived.Raise(this, envelope.GetReceiveEventName(), envelope);
        }
Пример #4
0
        private void OnWhisperEvent(ZyreEventWhisper whisperEvent)
        {
            var temp = WhisperEvent; // for thread safety

            temp?.Invoke(this, whisperEvent);
        }
Пример #5
0
        // These events offer similar functionality to zeromq/zyre/zyre_event.c

        /// <summary>
        /// This receives a message relayed by ZyreNode.ReceivePeer()
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void InboxReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            var msg = _inbox.ReceiveMultipartMessage();

            if (msg.FrameCount < 3)
            {
                return;
            }
            var msgType     = msg.Pop().ConvertToString();
            var senderBytes = msg.Pop().Buffer;

            Debug.Assert(senderBytes.Length == 16);
            var    senderUuid = new Guid(senderBytes);
            var    name       = msg.Pop().ConvertToString();
            string groupName;

            switch (msgType)
            {
            case "ENTER":
                var headersBuffer = msg.Pop().Buffer;
                var headers       = Serialization.BinaryDeserialize <Dictionary <string, string> >(headersBuffer);
                var address       = msg.Pop().ConvertToString();
                var enterEvent    = new ZyreEventEnter(senderUuid, name, headers, address);
                OnEnterEvent(enterEvent);
                break;

            case "WHISPER":
                var whisperEvent = new ZyreEventWhisper(senderUuid, name, msg);
                OnWhisperEvent(whisperEvent);
                break;

            case "SHOUT":
                groupName = msg.Pop().ConvertToString();
                var shoutEvent = new ZyreEventShout(senderUuid, name, groupName, msg);
                OnShoutEvent(shoutEvent);
                break;

            case "JOIN":
                groupName = msg.Pop().ConvertToString();
                var joinEvent = new ZyreEventJoin(senderUuid, name, groupName);
                OnJoinEvent(joinEvent);
                break;

            case "LEAVE":
                groupName = msg.Pop().ConvertToString();
                var leaveEvent = new ZyreEventLeave(senderUuid, name, groupName);
                OnLeaveEvent(leaveEvent);
                break;

            case "EXIT":
                OnExitEvent(new ZyreEventExit(senderUuid, name));
                break;

            case "STOP":
                OnStopEvent(new ZyreEventStop(senderUuid, name));
                break;

            case "EVASIVE":
                OnEvasiveEvent(new ZyreEventEvasive(senderUuid, name));
                break;

            default:
                throw new ArgumentException(msgType);
            }
        }