Files
firestorm/Gameleap/code/mw4/Libraries/stuff/SafeSocket.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

165 lines
4.6 KiB
C++

//===========================================================================//
// File: sfeskt.cc //
// Project: MUNGA Brick: Connection Engine //
// Contents: Implementation details for safe m_socket class //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 09/29/94 ECH Initial coding. //
// 10/28/94 JMA Made compatible with SGI CC and merged with iterator //
// 11/03/94 ECH Made compatible with BC4.0 //
// 12/12/94 ECH Changed release mechanism //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc. //
// PROPRIETARY AND CONFIDENTIAL //
//===========================================================================//
#include "StuffHeaders.hpp"
//
//###########################################################################
// SafeSocket
//###########################################################################
//
SafeSocket::SafeSocket(void *)
{
m_iteratorHead = NULL;
}
//
//###########################################################################
// ~SafeSocket
//###########################################################################
//
SafeSocket::~SafeSocket()
{
Check_Object(this);
Verify(m_iteratorHead == NULL);
}
//
//###########################################################################
// TestInstance
//###########################################################################
//
void
SafeSocket::TestInstance()
{
Socket::TestInstance();
if (m_iteratorHead != NULL)
{
Check_Signature(m_iteratorHead);
}
}
//
//###########################################################################
// SendIteratorMemo
//###########################################################################
//
void
SafeSocket::SendIteratorMemo(
IteratorMemo memo,
void *content
)
{
Check_Object(this);
SafeIterator *iterator;
for (
iterator = m_iteratorHead;
iterator != NULL;
iterator = iterator->m_nextIterator
) {
Check_Object(iterator);
iterator->ReceiveMemo(memo, content);
}
}
//
//###########################################################################
// SafeIterator
//###########################################################################
//
SafeIterator::SafeIterator(SafeSocket *safeSocket):
SocketIterator(safeSocket)
{
//
// Link iterator into sockets set of iterators
//
Check_Object(safeSocket);
if ((m_nextIterator = safeSocket->m_iteratorHead) != NULL)
{
Check_Object(m_nextIterator);
m_nextIterator->m_prevIterator = this;
}
m_prevIterator = NULL;
safeSocket->m_iteratorHead = this;
}
//
//###########################################################################
// ~SafeIterator
//###########################################################################
//
SafeIterator::~SafeIterator()
{
Check_Object(this);
SafeSocket *safeSocket = Cast_Object(SafeSocket*, m_socket);
//
// Remove iterator from sockets set of iterators
//
Check_Object(safeSocket);
if (safeSocket->m_iteratorHead == this)
{
safeSocket->m_iteratorHead = m_nextIterator;
}
if (m_prevIterator != NULL)
{
Check_Object(m_prevIterator);
m_prevIterator->m_nextIterator = m_nextIterator;
}
if (m_nextIterator != NULL)
{
Check_Object(m_nextIterator);
m_nextIterator->m_prevIterator = m_prevIterator;
}
}
//
//###########################################################################
// TestInstance
//###########################################################################
//
void
SafeIterator::TestInstance() const
{
SocketIterator::TestInstance();
if (m_prevIterator != NULL)
{
Check_Signature(m_prevIterator);
}
if (m_nextIterator != NULL)
{
Check_Signature(m_nextIterator);
}
}
//
//###########################################################################
// ReceiveMemo
//###########################################################################
//
void
SafeIterator::ReceiveMemo(
IteratorMemo,
void*
)
{
Check_Object(this);
STOP(("SafeIterator::ReceiveMemo - Should never reach here"));
}