A multiuser application requires synchronization between two clients and must use event handlers to react to connection- and data-related events.
The following processes make up the foundation of a multiuser MSN® Messenger Activity:
- Sending and receiving data
- Error handling
After an invitation to run an Activity has been sent and accepted, both Messenger clients load the application. The application that loads first must wait until the other application sends the signal that it is ready to communicate.
Here is an example order of events:
The first application to load calls Channel.Initialize, and then waits for the event Channel.OnRemoteAppLoaded to fire. The second application calls Channel.Initialize when it is ready to communicate, and the event Channel.OnRemoteAppLoaded fires immediately.
If the remote user cannot load the application, then the event Channel.OnRemoteAppLoaded will never fire back to the first application. You can set a timer to display a message after a certain interval, so the application does not appear to be frozen.
When a computer's Internet security level is set to High, scripting is disabled, and MSN Messenger Activities will not run.
Sending and Receiving Data
The primary way to send information is by the method Channel.SendData. An application must have an event handler called Channel.OnDataReceived; this event fires when the application receives data.
The methods Channel.SendIM and Channel.SendIMAsUser can be used to send instant messages. If used, the application must also have an event handler for Channel.OnIMReceived.
The method Channel.SendFile can be used to transfer files. If used, the application must also have an event handler for Channel.OnFileReceived.
Special permissions are required for using the instant message and file transfer features. For more information on permissions, see Standard vs. Advanced Applications.
An application should have an event handler called Channel.OnRemoteAppClosed. After this event fires, the connection is closed. Any method that tries to send data to a closed connection will throw an exception.
An application should have an event handler for Channel.OnDataError. This event fires if Channel.SendData fails. Channel.OnDataError contains variables that, if used, display the type of error and provide a copy of the data. Typically, an application should try to send the data again, in case the error was an isolated communication problem.