| 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. |