Exemple #1
0
 private static void EmitEvent(string eventName, IEventBinder binder, string jsonMessage, Dictionary <string, object> message)
 {
     if (binder.HasListeners)
     {
         if (binder is PusherEventEmitter pusherEventEmitter)
         {
             PusherEvent pusherEvent = new PusherEvent(message, jsonMessage);
             if (pusherEvent != null)
             {
                 pusherEventEmitter.EmitEvent(eventName, pusherEvent);
             }
         }
         else if (binder is TextEventEmitter textEventEmitter)
         {
             string textEvent = jsonMessage;
             if (textEvent != null)
             {
                 textEventEmitter.EmitEvent(eventName, textEvent);
             }
         }
         else if (binder is DynamicEventEmitter dynamicEventEmitter)
         {
             var     template     = new { @event = string.Empty, data = string.Empty, channel = string.Empty, user_id = string.Empty };
             dynamic dynamicEvent = JsonConvert.DeserializeAnonymousType(jsonMessage, template);
             if (dynamicEvent != null)
             {
                 dynamicEventEmitter.EmitEvent(eventName, dynamicEvent);
             }
         }
     }
 }
 void IPusher.EmitChannelEvent(string channelName, string eventName, PusherEvent data)
 {
     if (Channels.ContainsKey(channelName))
     {
         Channels[channelName].EmitEvent(eventName, data);
     }
 }
        internal void EmitEvent(string eventName, PusherEvent data)
        {
            var stringData = data.ToString();

            ActionData(_rawGeneralListeners, _rawEventListeners, eventName, stringData);
            EmitDynamicEvent(eventName, stringData);
            ActionData(_pusherEventGeneralListeners, _pusherEventEventListeners, eventName, data);
        }
        private async Task OnPusherEventReceptionAsync(PusherEventConfig config, PusherClient.PusherEvent rawEvent)
        {
            Debug.WriteLine(config.ChannelName);
            Debug.WriteLine(config.EventName);
            var pusherEvent = PusherEvent.From(rawEvent);

            Debug.WriteLine(pusherEvent.EventData.Message);

            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Events.Add(pusherEvent);
            });

            SpawnEventToast(pusherEvent);
        }
Exemple #5
0
        private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            Pusher.Trace.TraceEvent(TraceEventType.Information, 0, "Websocket message received: " + e.Message);

            Debug.WriteLine(e.Message);

            // DeserializeAnonymousType will throw and error when an error comes back from pusher
            // It stems from the fact that the data object is a string normally except when an error is sent back
            // then it's an object.

            // bad:  "{\"event\":\"pusher:error\",\"data\":{\"code\":4201,\"message\":\"Pong reply not received\"}}"
            // good: "{\"event\":\"pusher:error\",\"data\":\"{\\\"code\\\":4201,\\\"message\\\":\\\"Pong reply not received\\\"}\"}";

            var jObject = JObject.Parse(e.Message);

            if (jObject["data"] != null && jObject["data"].Type != JTokenType.String)
            {
                jObject["data"] = jObject["data"].ToString(Formatting.None);
            }

            var jsonMessage = jObject.ToString(Formatting.None);
            var template    = new { @event = string.Empty, data = string.Empty, channel = string.Empty };

            var message = JsonConvert.DeserializeAnonymousType(jsonMessage, template);

            var eventData = JsonConvert.DeserializeObject <Dictionary <string, object> >(jsonMessage);

            if (jObject["data"] != null)
            {
                eventData["data"] = jObject["data"].ToString(); // undo any kind of deserialisation of the data property
            }
            var receivedEvent = new PusherEvent(eventData, jsonMessage);

            _pusher.EmitPusherEvent(message.@event, receivedEvent);

            if ([email protected](Constants.PUSHER_MESSAGE_PREFIX))
            {
                // Assume Pusher event
                switch (message.@event)
                {
                // TODO - Need to handle Error on subscribing to a channel

                case Constants.ERROR:
                    ParseError(message.data);
                    break;

                case Constants.CONNECTION_ESTABLISHED:
                    ParseConnectionEstablished(message.data);
                    break;

                case Constants.CHANNEL_SUBSCRIPTION_SUCCEEDED:
                    _pusher.SubscriptionSuceeded(message.channel, message.data);
                    break;

                case Constants.CHANNEL_SUBSCRIPTION_ERROR:
                    RaiseError(new PusherException("Error received on channel subscriptions: " + e.Message, ErrorCodes.SubscriptionError));
                    break;

                case Constants.CHANNEL_MEMBER_ADDED:
                    _pusher.AddMember(message.channel, message.data);

                    Pusher.Trace.TraceEvent(TraceEventType.Warning, 0, "Received a presence event on channel '" + message.channel + "', however there is no presence channel which matches.");
                    break;

                case Constants.CHANNEL_MEMBER_REMOVED:
                    _pusher.RemoveMember(message.channel, message.data);

                    Pusher.Trace.TraceEvent(TraceEventType.Warning, 0, "Received a presence event on channel '" + message.channel + "', however there is no presence channel which matches.");
                    break;
                }
            }
            else // Assume channel event
            {
                _pusher.EmitChannelEvent(message.channel, message.@event, receivedEvent);
            }
        }
 void IPusher.EmitPusherEvent(string eventName, PusherEvent data)
 {
     EmitEvent(eventName, data);
 }