Pusher .NET client library for interacting with the Pusher WebSocket API
Clone or download

README.md

Pusher .NET Client library

This is a .NET library for interacting with the Pusher WebSocket API.

Registering at http://pusher.com and use the application credentials within your app as shown below.

More general documentation can be found at http://pusher.com/docs/.

Installation

NuGet Package

Install-Package PusherClient

Usage

See the example app for full details.

Connect

Event based

_pusher = new Pusher("YOUR_APP_KEY");
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
_pusher.Connect();

where _pusher_ConnectionStateChanged and _pusher_Error are custom event handlers such as

static void _pusher_ConnectionStateChanged(object sender, ConnectionState state)
{
    Console.WriteLine("Connection state: " + state.ToString());
}

static void _pusher_Error(object sender, PusherException error)
{
    Console.WriteLine("Pusher Error: " + error.ToString());
}

Asynchronous

_pusher = new Pusher("YOUR_APP_KEY");
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
ConnectionState connectionState = await _pusher.ConnectAsync();

In the case of the async version, state and error changes will continue to be published via events, but the initial connection state will be returned from the ConnectAsync() method.

Authenticated Connect

If you have an authentication endpoint for private or presence channels:

Event based

_pusher = new Pusher("YOUR_APP_KEY", new PusherOptions(){
    Authorizer = new HttpAuthorizer("YOUR_ENDPOINT")
});
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
_pusher.Connect();

Asynchronous

_pusher = new Pusher("YOUR_APP_KEY", new PusherOptions(){
    Authorizer = new HttpAuthorizer("YOUR_ENDPOINT")
});
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
ConnectionState connectionState = await _pusher.ConnectAsync();

Non Default Cluster

If you are on a non default cluster (e.g. eu):

Event based

_pusher = new Pusher("YOUR_APP_KEY", new PusherOptions(){
    Cluster = "eu"
});
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
_pusher.Connect();

Asynchonous

_pusher = new Pusher("YOUR_APP_KEY", new PusherOptions(){
    Cluster = "eu"
});
_pusher.ConnectionStateChanged += _pusher_ConnectionStateChanged;
_pusher.Error += _pusher_Error;
ConnectionState connectionState = _pusher.ConnectAsync();

Subscribe to a public or private channel

Event based

_myChannel = _pusher.Subscribe("my-channel");
_myChannel.Subscribed += _myChannel_Subscribed;

where _myChannel_Subscribed is a custom event handler such as

static void _myChannel_Subscribed(object sender)
{
    Console.WriteLine("Subscribed!");
}

Asynchronous

Channel _myChannel = await _pusher.SubscribeAsync("my-channel");

Bind to an event

_myChannel.Bind("my-event", (dynamic data) =>
{
    Console.WriteLine(data.message);
});

Subscribe to a presence channel

Event based

_presenceChannel = (PresenceChannel)_pusher.Subscribe("presence-channel");
_presenceChannel.Subscribed += _presenceChannel_Subscribed;
_presenceChannel.MemberAdded += _presenceChannel_MemberAdded;
_presenceChannel.MemberRemoved += _presenceChannel_MemberRemoved;

Where _presenceChannel_Subscribed, _presenceChannel_MemberAdded, and _presenceChannel_MemberRemoved are custom event handlers such as

static void _presenceChannel_MemberAdded(object sender, KeyValuePair<string, dynamic> member)
{
    Console.WriteLine((string)member.Value.name.Value + " has joined");
    ListMembers();
}

static void _presenceChannel_MemberRemoved(object sender)
{
    ListMembers();
}

Asynchronous

_presenceChannel = await (PresenceChannel)_pusher.SubscribeAsync("presence-channel");
_presenceChannel.Subscribed += _presenceChannel_Subscribed;
_presenceChannel.MemberAdded += _presenceChannel_MemberAdded;
_presenceChannel.MemberRemoved += _presenceChannel_MemberRemoved;

Unbind

Remove a specific callback:

_myChannel.Unbind("my-event", callback);

Remove all callbacks for a specific event:

_myChannel.Unbind("my-event");

Remove all bindings on the channel:

_myChannel.UnbindAll();

Developer Notes

Publish to NuGet

You should be familiar with creating an publishing NuGet packages.

From the pusher-dotnet-client directory:

  1. Update pusher-dotnet-client.nuspec with new version number etc.
  2. Run package.cmd
  3. Run tools/nuget.exe push PusherClient.{VERSION}.nupkg

License

This code is free to use under the terms of the MIT license.