/* ** Command & Conquer Generals(tm) ** Copyright 2025 Electronic Arts 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 . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: PeerDefsImplementation.h ////////////////////////////////////////////////////// // Generals GameSpy Peer (chat) implementation definitions // Author: Matthew D. Campbell, Sept 2002 #pragma once #ifndef __PEERDEFSIMPLEMENTATION_H__ #define __PEERDEFSIMPLEMENTATION_H__ #include "GameNetwork/GameSpy/PeerDefs.h" #include "GameNetwork/GameSpy/PersistentStorageThread.h" class GameSpyInfo : public GameSpyInfoInterface { public: GameSpyInfo(); virtual ~GameSpyInfo(); virtual void reset( void ); virtual void clearGroupRoomList( void ) { m_groupRooms.clear(); m_gotGroupRoomList = false; } virtual GroupRoomMap* getGroupRoomList( void ) { return &m_groupRooms; } virtual void addGroupRoom( GameSpyGroupRoom room ); virtual Bool gotGroupRoomList( void ) { return m_gotGroupRoomList; } virtual void joinGroupRoom( Int groupID ); virtual void leaveGroupRoom( void ); virtual void joinBestGroupRoom( void ); virtual void setCurrentGroupRoom( Int groupID ) { m_currentGroupRoomID = groupID; m_playerInfoMap.clear(); } virtual Int getCurrentGroupRoom( void ) { return m_currentGroupRoomID; } virtual void updatePlayerInfo( PlayerInfo pi, AsciiString oldNick = AsciiString::TheEmptyString ); virtual void playerLeftGroupRoom( AsciiString nick ); virtual PlayerInfoMap* getPlayerInfoMap( void ) { return &m_playerInfoMap; } virtual void setLocalName( AsciiString name ) { m_localName = name; } virtual AsciiString getLocalName( void ) { return m_localName; } virtual void setLocalProfileID( Int profileID ) { m_localProfileID = profileID; } virtual Int getLocalProfileID( void ) { return m_localProfileID; } virtual AsciiString getLocalEmail( void ) { return m_localEmail; } virtual void setLocalEmail( AsciiString email ) { m_localEmail = email; } virtual AsciiString getLocalPassword( void ){ return m_localPasswd; } virtual void setLocalPassword( AsciiString passwd ) { m_localPasswd = passwd; } virtual void setLocalBaseName( AsciiString name ) { m_localBaseName = name; } virtual AsciiString getLocalBaseName( void ){ return m_localBaseName; } virtual void setCachedLocalPlayerStats( PSPlayerStats stats ) {m_cachedLocalPlayerStats = stats; } virtual PSPlayerStats getCachedLocalPlayerStats( void ){ return m_cachedLocalPlayerStats; } virtual BuddyInfoMap* getBuddyMap( void ) { return &m_buddyMap; } virtual BuddyInfoMap* getBuddyRequestMap( void ) { return &m_buddyRequestMap; } virtual BuddyMessageList* getBuddyMessages( void ) { return &m_buddyMessages; } virtual Bool isBuddy( Int id ); virtual void clearStagingRoomList( void ); virtual StagingRoomMap* getStagingRoomList( void ) { return &m_stagingRooms; } virtual GameSpyStagingRoom* findStagingRoomByID( Int id ); virtual void addStagingRoom( GameSpyStagingRoom room ); virtual void updateStagingRoom( GameSpyStagingRoom room ); virtual void removeStagingRoom( GameSpyStagingRoom room ); virtual Bool hasStagingRoomListChanged( void ); virtual void leaveStagingRoom( void ); virtual void markAsStagingRoomHost( void ); virtual void markAsStagingRoomJoiner( Int game ); virtual Int getCurrentStagingRoomID( void ) { return m_localStagingRoomID; } virtual void sawFullGameList( void ) { m_sawFullGameList = TRUE; } virtual void setDisallowAsianText( Bool val ); virtual void setDisallowNonAsianText( Bool val ); virtual Bool getDisallowAsianText( void ); virtual Bool getDisallowNonAsianText(void ); // chat virtual void registerTextWindow( GameWindow *win ); virtual void unregisterTextWindow( GameWindow *win ); virtual Int addText( UnicodeString message, Color c, GameWindow *win ); virtual void addChat( PlayerInfo p, UnicodeString msg, Bool isPublic, Bool isAction, GameWindow *win ); virtual void addChat( AsciiString nick, Int profileID, UnicodeString msg, Bool isPublic, Bool isAction, GameWindow *win ); virtual Bool sendChat( UnicodeString message, Bool isAction, GameWindow *playerListbox ); virtual void setMOTD( const AsciiString& motd ); virtual const AsciiString& getMOTD( void ); virtual void setConfig( const AsciiString& config ); virtual const AsciiString& getConfig( void ); virtual void setPingString( const AsciiString& ping ) { m_pingString = ping; } virtual const AsciiString& getPingString( void ) { return m_pingString; } virtual Int getPingValue( const AsciiString& otherPing ); virtual Bool amIHost( void ); virtual GameSpyStagingRoom* getCurrentStagingRoom( void ); virtual void setGameOptions( void ); virtual void addToIgnoreList( AsciiString nick ); virtual void removeFromIgnoreList( AsciiString nick ); virtual Bool isIgnored( AsciiString nick ); virtual IgnoreList returnIgnoreList( void ); virtual void loadSavedIgnoreList( void ); virtual SavedIgnoreMap returnSavedIgnoreList( void ); virtual void addToSavedIgnoreList( Int profileID, AsciiString nick); virtual void removeFromSavedIgnoreList( Int profileID ); virtual Bool isSavedIgnored( Int profileID ); virtual void setLocalIPs(UnsignedInt internalIP, UnsignedInt externalIP); virtual UnsignedInt getInternalIP(void) { return m_internalIP; } virtual UnsignedInt getExternalIP(void) { return m_externalIP; } virtual Bool isDisconnectedAfterGameStart(Int *reason) const { if (reason) *reason = m_disconReason; return m_isDisconAfterGameStart; } virtual void markAsDisconnectedAfterGameStart(Int reason) { m_isDisconAfterGameStart = TRUE; m_disconReason = reason; } virtual Bool didPlayerPreorder( Int profileID ) const; virtual void markPlayerAsPreorder( Int profileID ); virtual void setMaxMessagesPerUpdate( Int num ); virtual Int getMaxMessagesPerUpdate( void ); virtual Int getAdditionalDisconnects( void ); virtual void clearAdditionalDisconnects( void ); virtual void readAdditionalDisconnects( void ); virtual void updateAdditionalGameSpyDisconnections(Int count); private: Bool m_sawFullGameList; Bool m_isDisconAfterGameStart; Int m_disconReason; AsciiString m_rawMotd; AsciiString m_rawConfig; AsciiString m_pingString; GroupRoomMap m_groupRooms; StagingRoomMap m_stagingRooms; Bool m_stagingRoomsDirty; BuddyInfoMap m_buddyMap; BuddyInfoMap m_buddyRequestMap; PlayerInfoMap m_playerInfoMap; BuddyMessageList m_buddyMessages; Int m_currentGroupRoomID; Bool m_gotGroupRoomList; AsciiString m_localName; Int m_localProfileID; AsciiString m_localPasswd; AsciiString m_localEmail; AsciiString m_localBaseName; PSPlayerStats m_cachedLocalPlayerStats; Bool m_disallowAsainText; Bool m_disallowNonAsianText; UnsignedInt m_internalIP, m_externalIP; Int m_maxMessagesPerUpdate; Int m_joinedStagingRoom; // if we join a staging room, this holds its ID (0 otherwise) Bool m_isHosting; // if we host, this is true, and GameSpyStagingRoom m_localStagingRoom; // this holds the GameInfo for it. Int m_localStagingRoomID; IgnoreList m_ignoreList; SavedIgnoreMap m_savedIgnoreMap; std::set m_textWindows; std::set m_preorderPlayers; Int m_additionalDisconnects; }; #endif // __PEERDEFS_H__