A Godot plugin for creating real-time interactions with the Pusher Channels Protocol over a WebSocket connection.
Plugin version | Godot version | Pusher Channels Protocol version |
---|---|---|
1.0 | 3.5.1 | 7.0 |
Move the ./addons folder into your project folder.
See full guide: Installing a plugin
Enable the plugin and add a Pusher
node to your main scene.
See full guide: Enabling a plugin
Create an account and then create a Channels app. See full guide
$Pusher.connect_app( APP_KEY, { "cluster": APP_CLUSTER } )
func connected_handler(data):
print("Hello!")
func error_handler(data):
print("Oh No!")
var error_callback = funcref(self, "error_handler")
var connected_callback = funcref(self, "connected_handler")
$Pusher.connection.bind("error", error_callback);
$Pusher.connection.bind("connected", connected_callback);
Authentication happens when you call the signin method
:
$Pusher.signin()
See full documentation
Before your app can receive any events from a channel, you need to subscribe to the channel. Do this with the subscribe
method:
var channel = $Pusher.subscribe("channel-name")
Every published event has an “event name”. For your app to do something when it receives an event called "my-event", your web app must first “bind” a function to this event name. Do this using the channel’s bind
method:
func event_handler(data):
print(data)
var event_callback = funcref(self, "event_handler")
channel.bind("my-event", event_callback)
You can only trigger a client event once a subscription has been successfully registered:
var channel = $Pusher.subscribe("channel-name")
var on_subscribed = func_ref(self, "handle_subscription")
channel.bind(PusherEvent.SUBSCRIPTION_SUCCEEDED, on_subscribed);
func handle_subscription():
channel.trigger("client-someEventName", { "message": "hello!" })
See full documentation
It is possible to set and update the client configuration through the configure
method:
$Pusher.configure(KEY, OPTIONS)
Params of the configure
method:
Param | Type | description |
---|---|---|
key | string | The application key |
options | dictionary | See below |
Based on Pusher channels options parameter:
Options | Type | description |
---|---|---|
cluster | string | The cluster used by your application |
userAuthentication | dictionary | See below |
channelAuthorization | dictionary | See below |
Based on Pusher userAuthentication object: | Option | Type | description |
---|---|---|---|
params | dictionary | Additional parameters | |
headers | dictionary | Additional HTTP headers | |
endpoint | string | URL endpoint of server for authentication. |
Based on Pusher channelAuthorization object: | Option | Type | description |
---|---|---|---|
params | dictionary | Additional parameters | |
headers | dictionary | Additional HTTP headers | |
endpoint | string | URL endpoint |
By default we don’t log anything. If you want to debug your application and see what’s going on within Channels then you can assign a global logging function.
The _log
value should be set with a function with the following signature:
$Pusher._log = funcref(self, "logger")
func logger(message):
print(message)
A connection to Pusher Channels can be established by invoking the connect_app
method of your pusher node:
$Pusher.connect_app()
A connection with custom configuration can be established by passing the same params from configure method:
$Pusher.connect_app(APP_KEY, { "cluster": APP_CLUSTER })
You may disconnect by invoking the disconnect_app
method:
$Pusher.disconnect_app()
You can monitor the state of the connection so that you can notify users about expected behaviour. See guide: connection states API
You can access the current state as:
$Pusher.connection.state
And bind to a state change using the connection bind
method:
$Pusher.connection.bind("connected", callback)
All state names are available as constants trough the PusherState
class:
// PusherState.CONNECTED == "connected"
$Pusher.connection.bind(PusherState.CONNECTED, callback)
See full list: Available connection states
The default method for subscribing to a channel involves invoking the subscribe
method of your pusher node:
$Pusher.subscribe("my-channel");
To unsubscribe from a channel, invoke the unsubscribe
method of your pusher object:
$Pusher.unsubscribe("my-channel");
If a channel has been subscribed to already it is possible to access channels by name, through the channel
method:
var channel = $Pusher.channel("channel-name")
Use the bind
method of the pusher node to listen for an event on all the channels that you are currently subscribed to:
$Pusher.bind(EVENT, CALLBACK);
Params of the bind
method:
Param | Type | description |
---|---|---|
event | string | The name of the event to bind to. |
callback | funcRef | Called whenever the event is triggered. See below |
In GDScript, functions are not first-class objects. This means it is impossible to store them directly as variables, return them from another function, or pass them as arguments.
However, by creating a FuncRef reference to a function in a given object can be created, passed around and called:
func event_handler(data):
print("Event received")
var callback = funcref(self, "event_handler")
Events can be bound to directly on a channel. This means you will only receive an event if it is sent on that specific channel:
channel.bind(eventName, callback)
Use unbind
to remove a binding of an event:
$Pusher.unbind(EVENT, CALLBACK)
Params of the unbind
method:
Param | Type | description |
---|---|---|
event | string | The name of the event from which your want to remove the binding. |
callback | funcRef | The function reference used when binding to the event. |