/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #ifndef PLNETMEMBER_inc #define PLNETMEMBER_inc #include "hsConfig.h" #include "hsUtils.h" #include "hsStlUtils.h" #include "pnFactory/plCreatable.h" class plNetApp; class plNetGenericServer; //////////////////////////////// // A participant (peer) who we can send and recv messages from/to //////////////////////////////// class plNetMember : public plCreatable { public: enum Flags { kWaitingForLinkQuery = 1<<0, // only used server side kIndirectMember = 1<<1, // this guy is behind a firewall of some sort kRequestP2P = 1<<2, // wants to play peer to peer kWaitingForChallengeResponse = 1<<3, // waiting for client response kIsServer = 1<<4, // used by transport member kAllowTimeOut = 1<<5, // used by gameserver }; protected: friend class plNetGenericServer; friend class plNetClientMgr; friend class plNetClientMsgHandler; friend class plNetClientGamePlayMsgHandler; Int32 fPeerID; // low-level netPlayer object for msg send/recv UInt32 fFlags; plNetApp* fNetApp; // these calls should be made by the client/server app only, // so they can keep the netCorePeer userData point to the right member virtual ~plNetMember() {} public: CLASSNAME_REGISTER( plNetMember ); GETINTERFACE_ANY( plNetMember, plCreatable ); plNetMember(); plNetMember(plNetApp* na); virtual void Reset(); // doesn't remove from session, just resets to initial state virtual bool IsEqualTo(const plNetMember * other) const = 0; // getters Int32 GetPeerID() const { return fPeerID; } UInt32 GetFlags() const { return fFlags; } plNetApp* GetNetApp() { return fNetApp; } virtual std::string AsStdString() const = 0; // setters void SetFlags(UInt32 f) { fFlags=f; } void SetNetApp(plNetApp* n) { fNetApp=n; } void SetPeerID(Int32 p) { fPeerID=p; } }; #endif // PLNETMEMBER_inc