private void websocket_Closed(object sender, EventArgs e)
        {
            Pusher.Log("Websocket connection has been closed");

            ChangeState(ConnectionState.Disconnected);

            if (_allowReconnect)
            {
                Connect();
            }
        }
        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);
                }
            }
        }
 internal void Send(string message)
 {
     Pusher.Log("Sending: " + message);
     _websocket.SendAsync(message, delegate(bool obj) { });
 }
 public Connection(Pusher pusher, string url)
 {
     this._url    = url;
     this._pusher = pusher;
 }
 private void websocket_Error(object sender, WebSocketSharp.ErrorEventArgs e)
 {
     // TODO: What happens here? Do I need to re-connect, or do I just log the issue?
     Pusher.LogWarning("Websocket error: " + e.Message);
 }
 private void websocket_Opened(object sender, EventArgs e)
 {
     Pusher.Log("Websocket opened OK.");
 }
Beispiel #7
0
 public PresenceChannel(string channelName, Pusher pusher) : base(channelName, pusher)
 {
 }