* 1 - Netstring to transfer method name and result easily; like LineOnlyReceiver, but different. ** client has callRemote method; server accepts method names, calls them, returns result ** result is used to fire the callRemote's returned Deferred * 2 - Two classes is clumsy and asymmetric; tag method calls and answers differently so one protocol can support both * 3 - Support multiple calls at once (pipelining); use a deque of Deferreds instead of one Deferred. Supports calls in either direction. * 4 - Support Deferreds being returned from remote_* methods ** introduces a problem; what if the Deferreds fire in the wrong order? ** demonstrate by swapping the deferLater delays to make them fire in the wrong order. * 5 - Include an id with call/answer messages and use a dict of Deferreds instead of a deque ** So far only string results are supported * 6 - Banana can convert simple types to strings ** Better choice than pickle for security reasons * 7 - Might as well use banana to encode the call/answer three-tuples as well * 8 - Using banana for entire message makes it easy to add support for method arguments too * 9 - More complicated types can't be encoded by banana though ** jelly turns more complicated types into simple types supported by banana ** pb_9.txt * 10 - Split the application logic out from the protocol into a separate class * 11 - Add cred support to allow the avatar to be changed ** Add an interface for the protocol's avatar, IRPC *** Do the dynamic dispatch inside the avatar rather than in the protocol ** Add a login method to the protocol directly *** Uses the portal to get a new avatar based on the supplied credentials ** Add a new kind of avatar with different remote methods ** Set up a portal with a realm that knows how to give out the right avatars *** Login can accept multiple interfaces; realm can decide which one to return **** different styles of handling multiple interfaces in realm ** Change app code to login and then call the importantStuff method