[Yake-svn] SF.net SVN: yake: [1722] trunk/yake/samples/net/common/commonEvents.h
Status: Beta
Brought to you by:
psyclonist
From: <psy...@us...> - 2007-04-20 20:35:53
|
Revision: 1722 http://svn.sourceforge.net/yake/?rev=1722&view=rev Author: psyclonist Date: 2007-04-20 13:35:54 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Added Paths: ----------- trunk/yake/samples/net/common/commonEvents.h Added: trunk/yake/samples/net/common/commonEvents.h =================================================================== --- trunk/yake/samples/net/common/commonEvents.h (rev 0) +++ trunk/yake/samples/net/common/commonEvents.h 2007-04-20 20:35:54 UTC (rev 1722) @@ -0,0 +1,138 @@ +#ifndef TEST_COMMONEVENTS_H +#define TEST_COMMONEVENTS_H + +#include <yake/ent/ent.h> + +#include <map> + +const yake::net::ChannelId CHANNELID_CONTROL = 0; +const yake::net::ChannelId CHANNELID_SIMCTRL = 1; +const yake::net::ChannelId CHANNELID_SIMUPD = 2; +const yake::net::ChannelId CHANNELID_COMM = 3; + +//--- +/* +// pull in types +typedef yake::net::INetEventConnection::CreateEventFn CreateEventFn; +typedef yake::net::INetEventConnection::DestroyEventFn DestroyEventFn; + +// event pool +struct EventPool +{ + EventPool(); + ~EventPool(); + void register_class(const yake::net::NetEvent::id_type id, const CreateEventFn&, const DestroyEventFn&); + { + classes_.insert( std::make_pair( id, ClassEntry(createFn,destroyFn) ) ); + } + yake::net::NetEvent* create(const yake::net::NetEvent::id_type); + void destroy(yake::net::NetEvent*); + void lookup(const yake::net::NetEvent::id_type id, CreateEventFn&, DestroyEventFn&); +private: + typedef std::deque<yake::net::NetEvent*> EventList; + struct ClassEntry + { + CreateEventFn createFn_; + DestroyEventFn destroyFn_; + EventList avail_; + EventList taken_; + }; + typedef std::map<yake::net::NetEvent::id_type,ClassEntry> ClassMap; //<= perfect candidate for AssocVector + ClassMap classes_; +}; + +// event registrator for use with pooled events and event connections +template<typename evt_type> +bool s_registerEvent(const EventPool& evtpool, + const yake::net::IEventConnection& conn, + const yake::net::NetEvent::id_type id, + const yake::net::NetEvent::Direction dir) +{ + CreateEventFn createFn = boost::bind(&EventPool::create,&evtpool,_1); + DestroyEventFn destroyFn = boost::bind(&EventPool::destroy,&evtpool,_1);; + conn.registerEvent(id,dir,ce.createFn,ce.destroyFn); +} +*/ +//--- + +struct version_t +{ + yake::uint8 ver[3]; + version_t() + { + ver[0] = 0; + ver[1] = 0; + ver[2] = 0; + } + version_t(const yake::uint8 maj, const yake::uint8 min, const yake::uint8 b) + { + ver[0] = maj; + ver[1] = min; + ver[2] = b; + } +}; +inline yake::net::obitstream& operator << (yake::net::obitstream& out, const version_t& rhs) +{ + out.write( rhs.ver[0], 8 ); + out.write( rhs.ver[1], 8 ); + out.write( rhs.ver[2], 8 ); + return out; +} +inline yake::net::ibitstream& operator >> (yake::net::ibitstream& in, version_t& rhs) +{ + in.read( rhs.ver[0], 8 ); + in.read( rhs.ver[1], 8 ); + in.read( rhs.ver[2], 8 ); + return in; +} + +struct c2sEvtJoinReq : public yake::net::NetEvent +{ + DECLARE_EVENT( c2sEvtJoinReq, 1 ); + virtual bool pack(yake::net::obitstream& out) const + { + out << version;; + return true; + } + virtual bool unpack(yake::net::ibitstream& in) + { + in >> version; + return true; + } + version_t version; +}; + +struct s2cEvtJoinReqReply : public yake::net::NetEvent +{ + DECLARE_EVENT( s2cEvtJoinReqReply, 2 ); + virtual bool pack(yake::net::obitstream& out) const + { + out.write( accepted ); + //std::string msg("i wanna join!"); + //out << msg; + return true; + } + virtual bool unpack(yake::net::ibitstream& in) + { + in.read( accepted ); + + //std::string msg; + //in >> msg; + //COUTLN("MSG: " << msg.c_str()); + return true; + } + bool accepted; +}; +struct c2sEvtSimOk : public yake::net::NetEvent +{ + DECLARE_EVENT( c2sEvtSimOk, 11 ); + virtual bool pack(yake::net::obitstream& out) const + { + return true; + } + virtual bool unpack(yake::net::ibitstream& in) + { + return true; + } +}; +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |