| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- /*
- ** 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 <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- #include "PreRTS.h" // This must go first in EVERY cpp file int the GameEngine
- #include "GameNetwork/FrameData.h"
- #include "GameNetwork/NetworkUtil.h"
- /**
- * Constructor
- */
- FrameData::FrameData()
- {
- m_frame = 0;
- m_commandList = NULL;
- m_commandCount = 0;
- m_frameCommandCount = -1;
- //Added By Sadullah Nader
- //Initializations missing and needed
- m_lastFailedCC = 0;
- m_lastFailedFrameCC = 0;
- //
- }
- /**
- * Destructor
- */
- FrameData::~FrameData()
- {
- if (m_commandList != NULL) {
- m_commandList->deleteInstance();
- m_commandList = NULL;
- }
- }
- /**
- * Initialize this thing.
- */
- void FrameData::init()
- {
- m_frame = 0;
- if (m_commandList == NULL) {
- m_commandList = newInstance(NetCommandList);
- m_commandList->init();
- }
- m_commandList->reset();
- m_frameCommandCount = -1;
- //DEBUG_LOG(("FrameData::init\n"));
- m_commandCount = 0;
- m_lastFailedCC = -2;
- m_lastFailedFrameCC = -2;
- }
- /**
- * Reset this thing.
- */
- void FrameData::reset() {
- init();
- }
- /**
- * update the thing, doesn't do anything at the moment.
- */
- void FrameData::update() {
- }
- /**
- * return the frame number this frame data is associated with.
- */
- UnsignedInt FrameData::getFrame() {
- return m_frame;
- }
- /**
- * Assign the frame number this frame data is associated with.
- */
- void FrameData::setFrame(UnsignedInt frame) {
- m_frame = frame;
- }
- /**
- * Returns true if all the frame command count is equal to the number of commands that have been received.
- */
- FrameDataReturnType FrameData::allCommandsReady(Bool debugSpewage) {
- if (m_frameCommandCount == m_commandCount) {
- m_lastFailedFrameCC = -2;
- m_lastFailedCC = -2;
- return FRAMEDATA_READY;
- }
- if (debugSpewage) {
- if ((m_lastFailedFrameCC != m_frameCommandCount) || (m_lastFailedCC != m_commandCount)) {
- DEBUG_LOG(("FrameData::allCommandsReady - failed, frame command count = %d, command count = %d\n", m_frameCommandCount, m_commandCount));
- m_lastFailedFrameCC = m_frameCommandCount;
- m_lastFailedCC = m_commandCount;
- }
- }
- if (m_commandCount > m_frameCommandCount) {
- DEBUG_LOG(("FrameData::allCommandsReady - There are more commands than there should be (%d, should be %d). Commands in command list are...\n", m_commandCount, m_frameCommandCount));
- NetCommandRef *ref = m_commandList->getFirstMessage();
- while (ref != NULL) {
- DEBUG_LOG(("%s, frame = %d, id = %d\n", GetAsciiNetCommandType(ref->getCommand()->getNetCommandType()).str(), ref->getCommand()->getExecutionFrame(), ref->getCommand()->getID()));
- ref = ref->getNext();
- }
- DEBUG_LOG(("FrameData::allCommandsReady - End of command list.\n"));
- DEBUG_LOG(("FrameData::allCommandsReady - about to clear the command list\n"));
- reset();
- DEBUG_LOG(("FrameData::allCommandsReady - command list cleared. command list length = %d, command count = %d, frame command count = %d\n", m_commandList->length(), m_commandCount, m_frameCommandCount));
- return FRAMEDATA_RESEND;
- }
- return FRAMEDATA_NOTREADY;
- }
- /**
- * Set the command count for this frame
- */
- void FrameData::setFrameCommandCount(UnsignedInt frameCommandCount) {
- //DEBUG_LOG(("setFrameCommandCount to %d for frame %d\n", frameCommandCount, m_frame));
- m_frameCommandCount = frameCommandCount;
- }
- /**
- * Get the command count for this frame.
- */
- UnsignedInt FrameData::getFrameCommandCount() {
- return m_frameCommandCount;
- }
- /**
- * return the number of commands received so far.
- */
- UnsignedInt FrameData::getCommandCount() {
- return m_commandCount;
- }
- /**
- * Add a command to this frame
- */
- void FrameData::addCommand(NetCommandMsg *msg) {
- // need to add the message in order of command ID
- if (m_commandList == NULL) {
- init();
- }
- // We don't need to worry about setting the relay since its not getting sent anywhere.
- if (m_commandList->findMessage(msg) != NULL) {
- // We don't want to add the same command twice.
- return;
- }
- m_commandList->addMessage(msg);
- ++m_commandCount;
- //DEBUG_LOG(("added command %d, type = %d(%s), command count = %d, frame command count = %d\n", msg->getID(), msg->getNetCommandType(), GetAsciiNetCommandType(msg->getNetCommandType()).str(), m_commandCount, m_frameCommandCount));
- }
- /**
- * Return the list of commands for this frame
- */
- NetCommandList * FrameData::getCommandList() {
- return m_commandList;
- }
- /**
- * Set both the command count and the frame command count to 0.
- */
- void FrameData::zeroFrame() {
- m_commandCount = 0;
- m_frameCommandCount = 0;
- }
- /**
- * destroy all the commands in this frame.
- */
- void FrameData::destroyGameMessages() {
- if (m_commandList == NULL) {
- return;
- }
- m_commandList->reset();
- m_commandCount = 0;
- }
|