|  | Startup protocol changes for version 2: | 
|  |  | 
|  | C->S	S->C | 
|  | ====	==== | 
|  | {later: | 
|  | GetRealPlugin(String pluginType, String platformId) | 
|  |  | 
|  | FatalError(String message) | 
|  |  | 
|  | RealPlugin(byte[] plugin) | 
|  | } | 
|  |  | 
|  |  | 
|  | CheckVersions(int minProtoVersion, int maxProtoVersion, | 
|  | String hostedHtmlVersion) | 
|  |  | 
|  | FatalError(String message) | 
|  |  | 
|  | ProtocolVersion(int protoVersion) | 
|  |  | 
|  |  | 
|  | {may be ommitted if no other supported transports: | 
|  | ChooseTransport(String[] supportedTransports) | 
|  |  | 
|  | FatalError(String msg) | 
|  |  | 
|  | SwitchTransport(String transport, String transportArgs) | 
|  |  | 
|  | [If transport is not empty, all further communication should be | 
|  | switched to the selected transport.  transportArgs varies by the | 
|  | transport.] | 
|  | } | 
|  |  | 
|  |  | 
|  | LoadModule(String url, String sessionKey, String userAgent, String moduleName) | 
|  |  | 
|  | [sessionKey is some arbitrary string to identify one group of modules as | 
|  | being part of the same session of one application.] | 
|  |  | 
|  | ... as before | 
|  |  | 
|  |  | 
|  |  | 
|  | The v1 protocol LoadModule message is still accepted, though with reduced | 
|  | functionality in the OOPHM UI.  After the module is loaded, v1 and v2 are | 
|  | exactly the same, which makes supporting both versions easier. |