
What is IMessage?
In the previous section (Your first controller) you could see that the OnMessage method had a parameter of type IMessage.
The signature of IMessage looks like this
The IMessage is the internal message format of XSockets and there are several important reasons it's existence.
It makes cross-protocol communication possible
One of the responsibilities of a protocol module is to convert each incoming frame to a IMessage. Since all incoming data is transformed into the common IMessage format we can have the same logic for all clients regardless of protocol.
It tells XSockets what controller and method to invoke
Since the IMessage has Topic and Controller as properties the framework can route each message to the correct Controller and method (where method name is matched against the topic).
The value in the Data will then be serialized into the parameter(s) of the method.
Enables model binding
Since XSockets reflects all modules and methods at startup the Data part of an IMessage can be serialized into the types that your method expects. When you do not know (or do not care) about the parameter type you can use IMessage as the type instead.