Re: [Opentnl-general] NetClassGroup Nightmare
Brought to you by:
mark_frohnmayer,
s_alanet
From: Mark F. <ma...@ga...> - 2005-05-15 18:59:41
|
Hey Tess, You were on to the right solution with the NetClassGroups. You'll need to edit the tnlNetBase.h file to look like: enum NetClassGroup { NetClassGroupLogin, ///< Group for community server/authentication classes NetClassGroupBob, ///< Group for messages known by Bob and the client. NetClassGroupJoe, ///< Group for messages known by Joe and the client. NetClassGroupSally, ///< Group for messages known by Sally and the client. NetClassGroupInvalid = NetClassGroupCount, }; enum NetClassMask { NetClassGroupLoginMask = 1 << NetClassGroupLogin, NetClassGroupBobMask = 1 << NetClassGroupBob, NetClassGroupJoeMask = 1 << NetClassGroupJoe, NetClassGroupSallyMask = 1 << NetClassGroupSally, NetClassGroupAllMask = (1 << NetClassGroupCount) - 1, }; You can easily add new service providers by adding a new net class group and mask pair. You'll need to define seperate connection classes for each of the connections to the servers, and then implement them with: TNL_IMPLEMENT_NETCONNECTION(BobConnection, NetClassGroupBob, true); TNL_IMPLEMENT_NETCONNECTION(JoeConnection, NetClassGroupJoe, true); TNL_IMPLEMENT_NETCONNECTION(SallyConnection, NetClassGroupSally, true); Let's say further that there are some messages that all 3 servers know how to respond to -- then it would be possible to do something like: class BaseConnection : public EventConnection { // declare some RPC that all of the connections use TNL_DECLARE_RPC(rpcFOO, (StringPtr bar)); }; class BobConnection : public BaseConnection { }; class JoeConnection : public BaseConnection { }; class SallyConnection : public BaseConnection { }; TNL_IMPLEMENT_RPC(BaseConnection, rpcFOO, (StringPtr bar), (bar), (NetClassGroupBobMask | NetClassGroupJoeMask | NetClassGroupSallyMask), RPCGuaranteedOrdered, RPCDirAny, 0) { printf("FooBAR!!!: %s", bar.getString()); } That make sense? - Mark Ben Garney wrote: > Some possible solutions: > > - Give each one stubs for what it has not. And accept it will break > if you talk about such to it. > - Synchronize the class list on connect. > - Use RPCs and define an interface such that you don't have to have > them be aware of the classes? > - Use a mask system to define what sets of classes different > objects know about? > > Mark might also have some ideas. > > Ben > > Tess Snider wrote: > >> Oh my aching head. >> >> Okay, now, suppose, for the moment, that I had some sort of complex >> distributed server. It was built using a small number of discrete >> server applications that communicate amongst themselves, and some of >> them communicate with the client. We'll give some names to the server >> apps: >> >> Login >> Bob >> Joe >> Sally >> >> So, the client knows about numerous game objects, including Widgets >> and Foodlesnorts. Bob knows about Widgets and Joe knows about >> Foodlesnorts, but neither knows about both. Seeing as how these are >> gameplay-related objects, they've been assigned to NetClassGroupGame. >> But there's one little problem. Since the client knows about both >> Widgets and Foodlesnorts, its mEventClassCount for the >> NetClassGroupGame doesn't match Bob's count or Joe's count. Thus, >> when the client attempts to connect to Bob, BobConnection's >> readConnectAccept fails on isVersionBorderCount, because the counts >> don't match up. >> >> Well, we could hijack NetClassGameMaster, and move the Foodlesnorts >> into that, even though it feels horribly, horribly wrong. However, >> it's not an extensible solution to the problem. The next time we run >> into this problem (say, Sally knows about something Bob knows about, >> but Joe doesn't), we're in the same pickle, and we're out of >> NetClassGroups (Login uses Community). >> >> So, what's the RIGHT solution to this problem? Any clues? >> >> Tess >> >> >> ------------------------------------------------------- >> This SF.Net email is sponsored by Oracle Space Sweepstakes >> Want to be the first software developer in space? >> Enter now for the Oracle Space Sweepstakes! >> http://ads.osdn.com/?ad_ids93&alloc_id281&op=click >> _______________________________________________ >> Opentnl-general mailing list >> Ope...@li... >> https://lists.sourceforge.net/lists/listinfo/opentnl-general >> >> >> >> > > > > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes! > http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click > _______________________________________________ > Opentnl-general mailing list > Ope...@li... > https://lists.sourceforge.net/lists/listinfo/opentnl-general |