00001 /*! 00002 * \file 00003 * X-Forge Engine <br> 00004 * Copyright 2000-2003 Fathammer Ltd 00005 * 00006 * \brief Default implementation for a inetcommunication manager. 00007 * 00008 * $Id: XFuInetNetwork.h,v 1.4 2003/10/08 11:08:34 slehti Exp $ 00009 * $Date: 2003/10/08 11:08:34 $ 00010 * $Revision: 1.4 $ 00011 */ 00012 00013 #ifndef XFUINETNETWORK_H_INCLUDED 00014 #define XFUINETNETWORK_H_INCLUDED 00015 00016 #include <xfcore/net/XFcUnknownSender.h> 00017 #include <xfcore/net/XFcClientLost.h> 00018 #include <xfcore/net/socket/XFcInetAddress.h> 00019 #include <xfcore/net/XFcCommunicationConstants.h> 00020 #include <xfcore/net/XFcDeviceDiscovery.h> 00021 #include <xfcore/XFcHashtable.h> 00022 #include <xfutil/XFuDynamicArray.h> 00023 #include <xfutil/XFuNetwork.h> 00024 00025 00026 class XFuSerializable; 00027 class XFcCommunicationScheduler; 00028 class XFcUnknownSender; 00029 class XFcClientLost; 00030 class XFcDataReceiver; 00031 class XFcObjectDataFrame; 00032 class XFcInetCommService; 00033 class XFcHostEntry; 00034 class XFcHostResolver; 00035 class XFcAdvertiser; 00036 class XFcInetHandler; 00037 class XFcInetClientWin; 00038 class XFcInetHostResolver; 00039 class XFcInetCommService; 00040 class XFcName; 00041 00042 //! Default implementation for a communication manager. 00043 00044 class XFuInetNetwork : public XFuNetwork, 00045 public XFcUnknownSender, 00046 public XFcClientLost, 00047 public XFcDeviceDiscovery 00048 { 00049 private: 00050 00051 //! Pointer to array of communication event handlers. 00052 XFuDynamicArray<XFuNetworkEventHandler*> *mNetworkEventHandlers; 00053 00054 //! Pointer to the communication scheduler. 00055 XFcCommunicationScheduler *mCommunicationScheduler; 00056 00057 //! Pointer to the communication handler. 00058 XFcInetHandler *mCommunicationHandler; 00059 00060 //! Pointer to the default data receiver. 00061 XFcDataReceiver *mDefaultDataReceiver; 00062 00063 //! Id of the communication handler. 00064 INT32 mCommunicationHandlerId; 00065 00066 //! Array of pointers to clients. 00067 XFcHashtable<UINT32, XFcInetClientWin *> mClients; 00068 00069 //! Maximum number of clients. 00070 INT32 mMaxClients; 00071 00072 //! Game token that is checked before new clients are allowed to connect. 00073 UINT32 mAcceptGameToken; 00074 00075 //! Holds status of advertiser device query. 00076 INT mAdvertiserStatus; 00077 00078 //! Holds inet server port. 00079 UINT16 mGamePort; 00080 00081 //! Pointer to the communication service. 00082 XFcInetHostResolver *mHostResolver; 00083 00084 //! Pointer to the inet communication service. 00085 XFcInetCommService *mCommService; 00086 00087 protected: 00088 00089 //! Protected constructor. 00090 XFuInetNetwork(); 00091 00092 //! Reserves memory for the client array (mClients) and initializes all the client pointers to NULL. 00093 virtual void initClients(INT32 aMaxClients); 00094 00095 //! Cleanup of all clients. 00096 virtual void deleteAllClients(); 00097 00098 //! Initializes default communication manager specific items that would normally be in the constructor. 00099 virtual INT init(); 00100 00101 public: 00102 00103 //! Static constructor. 00104 static XFuInetNetwork * create(); 00105 00106 //! Destructor. 00107 virtual ~XFuInetNetwork(); 00108 00109 //! Resets the communication manager. 00110 virtual void reset(); 00111 00112 //! Runs the communication scheduler. 00113 virtual void runCommunicationScheduler(); 00114 00115 //! Connection lost handler (XFuClientLost) (callback). 00116 virtual void clientLost(INT32 aClientId); 00117 00118 //! Handle data from an unknown client (callback). 00119 virtual INT handleSender(const void *aAddress, const CHAR8 *aData, INT32 aLen); 00120 00121 //! Enables the inet communication handler and opens it for service. 00122 /*! Use port 0 for random port. 00123 * Default speed is one of the XFuNET_CONNECTION_SPEED values (see XFcClientCommWin.h) 00124 */ 00125 virtual INT enableService(INT32 aMaxClients, UINT16 aPort, INT32 aDefaultSpeed); 00126 00127 //! Closes the currently active service (communication handler). 00128 virtual void closeService(); 00129 00130 //! Returns the specified client. 00131 virtual XFcClientCommWin * getClient(INT32 aClientId); 00132 00133 //! Adds a client with the specific address. 00134 /*! \return The client id or XFCNET_CLIENTADD_ERROR if failed. 00135 */ 00136 virtual INT32 addClient(XFcAddress *aAddress, INT32 aTimeoutTime = 15000); 00137 00138 //! Removes the specified client. 00139 virtual void removeClient(INT32 aClientId); 00140 00141 //! Removes all clients. 00142 virtual void removeAllClients(); 00143 00144 //! Returns the game token that is checked before new clients are allowed to connect. 00145 virtual UINT32 getAcceptGameToken(); 00146 00147 //! Sets the game token that is checked before new clients are allowed to connect. 00148 virtual void setAcceptGameToken(UINT32 aAcceptGameToken); 00149 00150 //! Sends a game connection packet. 00151 virtual void sendGameConnectPacket(INT32 aClientId, UINT32 aGameToken); 00152 00153 //! Returns a pointer to the default data receiver. 00154 virtual XFcDataReceiver * getDefaultDataReceiver(); 00155 00156 //! Sets the default data receiver. 00157 virtual void setDefaultDataReceiver(XFcDataReceiver *aReceiver); 00158 00159 //! Returns the specified data receiver. 00160 virtual XFcDataReceiver * getDataReceiver(UINT32 aId); 00161 00162 //! Adds a new data receiver. 00163 virtual INT addDataReceiver(UINT32 aId, XFcDataReceiver *aReceiver); 00164 00165 //! Removes a data receiver. 00166 virtual XFcDataReceiver * removeDataReceiver(UINT32 aId); 00167 00168 //! Returns the round trip time for the specified client. 00169 virtual INT32 getRoundTripTime(INT32 aClientId); 00170 00171 //! Get packet frame. 00172 virtual XFcObjectDataFrame * getPacketFrame(INT32 aClientId, XFCNET_MESSAGE_SLOT aSlot); 00173 00174 //! Get recent state frame. 00175 virtual XFcObjectDataFrame * getRecentStateFrame(INT32 aClientId, INT32 aRecentId); 00176 00177 //! Remove recent state frame. 00178 virtual void removeRecentStateFrame(INT32 aClientId, INT32 aRecentId); 00179 00180 //! Sends a serializable object to the specified client. 00181 virtual INT32 send(INT32 aClientId, UINT32 aReceiverId, XFCNET_MESSAGE_SLOT aSlot, XFuSerializable *aSerializable); 00182 00183 //! Sends a serializable object to the specified client as a recent state packet. 00184 virtual INT32 sendRecentState(INT32 aClientId, UINT32 aReceiverId, INT32 aRecentId, XFuSerializable *aSerializable); 00185 00186 //! Adds a communication event handler. 00187 virtual void addEventHandler(XFuNetworkEventHandler *aHandler); 00188 00189 //! Removes a communication event handler. 00190 virtual void removeEventHandler(XFuNetworkEventHandler *aHandler); 00191 00192 //! Removes all communication event handlers. 00193 virtual void removeAllEventHandlers(); 00194 00195 //! Cretes advertiser for opened service. 00196 /*! 00197 * \param aMessage message to be sent to the receiver of the advertise, or NULL to use the default message. 00198 * \param aAdvertisePort port where advertiser is created and for bt its 0. 00199 * \return 1 if advertiser service starts successfully, or XFCNET_ERROR otherwise. 00200 */ 00201 virtual INT startAdvertiser(const CHAR8 *aMessage, UINT16 aAdvertisePort); 00202 00203 //! Stops the advertiser service. 00204 virtual void stopAdvertiser(); 00205 00206 //! Starts server device discovery. 00207 /*! 00208 * \param aMessage message to be sent to the receiver of the advertise, or NULL to use the default message. 00209 * \param aAdvertisePort port where advertiser is created and for bt its 0. 00210 * \return 1 if discovery starts successfully, or XFCNET_ERROR otherwise. 00211 */ 00212 virtual INT startServerDiscovery(const CHAR8 *aMessage, UINT16 aAdvertisePort); 00213 00214 //! Stops device discovery. 00215 virtual void stopServerDiscovery(); 00216 00217 //! Inherited from XFcDeviceDiscovery. 00218 virtual void deviceDiscovery(const XFcLinkedList<XFcAdvertiser *> &aAdvertiser); 00219 //! Inherited from XFcDeviceDiscovery. 00220 virtual void deviceDiscovery(const XFcLinkedList<XFcHostEntry *> &) { return; } 00221 00222 //! Gets device local name. 00223 virtual INT deviceLocalName(XFcName &aName); 00224 }; 00225 00226 #endif // !XFUINETNETWORK_H_INCLUDED
![]() | ||||
![]() |
Confidential Copyright © 2002-2003 Fathammer | with doxygen by Dimitri van Heesch |