Events system
Client and server interactions in PlayServ are based on events. Both the client and the server use events from the Client SDK.
When to use events
Use events when you need to deliver a typed payload from one side to the other using the Client SDK event mechanism:
- define a contract with
[Event]— identifier and payload - send the event using
Send(...)or generated sugar - receive it by subscribing via
Wait<T>(...) - stop receiving it via
Stop()
Events provide a consistent, type-safe contract for data exchange between client and server:
- the payload structure is fixed by the
[Event]definition - the same event contract is available on both sides through automatic generation of event description classes
- syntactic sugar reduces boilerplate for sending registered events
Define an event
An event must be defined first. This gives it an identifier and specifies the payload it carries.
[Event]
class ChatMessage {
string text;
int priority;
}
After an event is declared, the code analyser uses these declarations to generate syntactic sugar and simplify working with registered events.
Send an event
An event can be sent using the explicit form or via generated sugar.
PlayServ.Send(new ChatMessage { text = "hello", priority = 1 });
PlayServ.SendChatMessage({ text = "hello", priority = 1 }); // sugar
PlayServ.SendChatMessage("hello", 1); // sugar
Receive an event
To receive events on the remote side, create a subscription using Wait.
var waiting = PlayServ.Wait<ChatMessage>(data => {
chat.Write($"Message {data.text}");
});
Cancel a subscription
To cancel a subscription, use Stop.
waiting.Stop();
Event contracts on both sides
For every external [Event] discovered in the sender-side code, event description classes — for example, ChatMessage — must be generated automatically in the receiver-side code.
When client and server share the same codebase, which is a common case, generating the event description class on the receiving side ensures the contract remains unified and type-safe on both sides.
Next step
Continue with RPC & Server-side Game Logic to understand how named server-side operations work alongside events.
For related topics:
- RPC & Server-side Game Logic — RPC and events are closely related when defining server-side behaviour
- Groups — group events use the same Events API and the same sugar pattern