private void websocket_MessageReceived(object sender, MessageEventArgs e) { Pusher.Log("Websocket message received: " + e.Data); if (e.IsPing) { Send("{\"event\": \"pusher:pong\"}"); return; } PusherEventData message = PusherEventData.FromJson(e.Data); _pusher.EmitEvent(message.eventName, message.data); if (message.eventName.StartsWith("pusher")) { // Assume Pusher event switch (message.eventName) { case Constants.ERROR: ParseError(message.data); break; case Constants.CONNECTION_ESTABLISHED: ParseConnectionEstablished(message.data); break; case Constants.CHANNEL_SUBSCRIPTION_SUCCEEDED: if (_pusher.Channels.ContainsKey(message.channel)) { var channel = _pusher.Channels[message.channel]; channel.SubscriptionSucceeded(message.data); } break; case Constants.CHANNEL_SUBSCRIPTION_ERROR: throw new PusherException("Error received on channel subscriptions: " + e.Data, ErrorCodes.SubscriptionError); case Constants.CHANNEL_MEMBER_ADDED: // Assume channel event if (_pusher.Channels.ContainsKey(message.channel)) { var channel = _pusher.Channels[message.channel]; if (channel is PresenceChannel) { ((PresenceChannel)channel).AddMember(message.data); break; } } Pusher.LogWarning("Received a presence event on channel '" + message.channel + "', however there is no presence channel which matches."); break; case Constants.CHANNEL_MEMBER_REMOVED: // Assume channel event if (_pusher.Channels.ContainsKey(message.channel)) { var channel = _pusher.Channels[message.channel]; if (channel is PresenceChannel) { ((PresenceChannel)channel).RemoveMember(message.data); break; } } Pusher.LogWarning("Received a presence event on channel '" + message.channel + "', however there is no presence channel which matches."); break; } } else { // Assume channel event if (_pusher.Channels.ContainsKey(message.channel)) { _pusher.Channels[message.channel].EmitEvent(message.eventName, message.data); } } }