Files
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

170 lines
4.5 KiB
C++

//===========================================================================//
// File: sfeskt.cc //
// Project: MUNGA Brick: Connection Engine //
// Contents: Implementation details for safe 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 <munga.hpp>
#pragma hdrstop
#if !defined(SFESKT_HPP)
#include <sfeskt.hpp>
#endif
//
//###########################################################################
// SafeSocket
//###########################################################################
//
SafeSocket::SafeSocket(Node *node):
Socket(node)
{
iteratorHead = NULL;
}
//
//###########################################################################
// ~SafeSocket
//###########################################################################
//
SafeSocket::~SafeSocket()
{
Verify(iteratorHead == NULL);
}
//
//###########################################################################
// TestInstance
//###########################################################################
//
Logical
SafeSocket::TestInstance() const
{
Socket::TestInstance();
if (iteratorHead != NULL)
{
Check_Signature(iteratorHead);
}
return True;
}
//
//###########################################################################
// SendIteratorMemo
//###########################################################################
//
void
SafeSocket::SendIteratorMemo(
IteratorMemo memo,
void *content
)
{
SafeIterator *iterator;
for (
iterator = iteratorHead;
iterator != NULL;
iterator = iterator->nextIterator
) {
Check(iterator);
iterator->ReceiveMemo(memo, content);
}
}
//
//###########################################################################
// SafeIterator
//###########################################################################
//
SafeIterator::SafeIterator(SafeSocket *safeSocket):
SocketIterator(safeSocket)
{
//
// Link iterator into sockets set of iterators
//
Check(safeSocket);
if ((nextIterator = safeSocket->iteratorHead) != NULL)
{
Check(nextIterator);
nextIterator->prevIterator = this;
}
prevIterator = NULL;
safeSocket->iteratorHead = this;
}
//
//###########################################################################
// ~SafeIterator
//###########################################################################
//
SafeIterator::~SafeIterator()
{
SafeSocket *safeSocket = Cast_Object(SafeSocket*, socket);
//
// Remove iterator from sockets set of iterators
//
Check(safeSocket);
if (safeSocket->iteratorHead == this)
{
safeSocket->iteratorHead = nextIterator;
}
if (prevIterator != NULL)
{
Check(prevIterator);
prevIterator->nextIterator = nextIterator;
}
if (nextIterator != NULL)
{
Check(nextIterator);
nextIterator->prevIterator = prevIterator;
}
}
//
//###########################################################################
// TestInstance
//###########################################################################
//
Logical
SafeIterator::TestInstance() const
{
SocketIterator::TestInstance();
if (prevIterator != NULL)
{
Check_Signature(prevIterator);
}
if (nextIterator != NULL)
{
Check_Signature(nextIterator);
}
return True;
}
//
//###########################################################################
// ReceiveMemo
//###########################################################################
//
void
SafeIterator::ReceiveMemo(
IteratorMemo,
void*
)
{
Fail("SafeIterator::ReceiveMemo - Should never reach here");
}