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.
316 lines
8.1 KiB
C++
316 lines
8.1 KiB
C++
//===========================================================================//
|
|
// File: m_plug.cc //
|
|
// Project: MUNGA Brick: Connection Library //
|
|
// Contents: Implementation details for plugs and their iterators //
|
|
//---------------------------------------------------------------------------//
|
|
// Date Who Modification //
|
|
// -------- --- -----------------------------------------------------------//
|
|
// 09/82/94 ECH Initial coding. //
|
|
// 10/20/94 JMA Fixed style stuff, merged PLGITR.CPP, added Remove() to //
|
|
// PlugIterator //
|
|
// 10/23/94 ECH Added greater deletion safety //
|
|
// 10/28/94 JMA Made compatible with SGI CC //
|
|
// 11/02/94 ECH Restored base ReceivePlugCommand //
|
|
// 11/03/94 ECH Made compatible with BC4.0 //
|
|
// 11/03/94 JMA Made constructor/destructor out-of-line, moved the //
|
|
// ReleasePlugLink into the virtual data, made compatible //
|
|
// with GNU C++ //
|
|
// 11/08/94 ECH Made compatible with BC4.0 //
|
|
// 12/01/94 JMA Made compatible with SGI CC //
|
|
// 12/12/94 ECH Removed release handler //
|
|
// 02/16/95 ECH Removed m_plug commands, added node command //
|
|
// 06/07/96 ECH Implemented m_socket based remove functionality //
|
|
//---------------------------------------------------------------------------//
|
|
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc. //
|
|
// All Rights reserved worldwide //
|
|
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
|
//===========================================================================//
|
|
|
|
#include "StuffHeaders.hpp"
|
|
|
|
//#############################################################################
|
|
//############################### Plug ##################################
|
|
//#############################################################################
|
|
|
|
Plug::ClassData*
|
|
Plug::DefaultData = NULL;
|
|
|
|
HGOSHEAP
|
|
Stuff::g_ConnectionEngineHeap = NULL;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
Plug::InitializeClass()
|
|
{
|
|
Verify(!g_ConnectionEngineHeap);
|
|
g_ConnectionEngineHeap = gos_CreateMemoryHeap("ConnectionEngine", 0, Stuff::g_LibraryHeap);
|
|
Check_Pointer(g_ConnectionEngineHeap);
|
|
|
|
Verify(!DefaultData);
|
|
DefaultData =
|
|
new ClassData(
|
|
PlugClassID,
|
|
"Stuff::Plug",
|
|
RegisteredClass::DefaultData
|
|
);
|
|
|
|
Register_Object(DefaultData);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
Plug::TerminateClass()
|
|
{
|
|
Check_Object(DefaultData);
|
|
delete DefaultData;
|
|
DefaultData = NULL;
|
|
|
|
Check_Pointer(g_ConnectionEngineHeap);
|
|
gos_DestroyMemoryHeap(g_ConnectionEngineHeap);
|
|
g_ConnectionEngineHeap = NULL;
|
|
}
|
|
|
|
//
|
|
//###########################################################################
|
|
// ~Plug
|
|
//###########################################################################
|
|
//
|
|
Plug::~Plug()
|
|
{
|
|
DESTRUCTOR("Plug");
|
|
|
|
Check_Object(this);
|
|
Link *link = m_linkHead;
|
|
while (link)
|
|
{
|
|
DESTRUCTOR("Plug::Link");
|
|
Check_Object(link);
|
|
Link *next = link->m_nextPlugLink;
|
|
Check_Object(link);
|
|
link->Remove(this);
|
|
if (link == next)
|
|
break;
|
|
link = next;
|
|
}
|
|
ChainLink *clink = m_chainLinkHead;
|
|
while (clink)
|
|
{
|
|
DESTRUCTOR("Plug::CLink");
|
|
Check_Object(clink);
|
|
ChainLink *next = clink->m_nextPlugLink;
|
|
Check_Object(clink);
|
|
delete clink;
|
|
if (clink == next)
|
|
break;
|
|
clink = next;
|
|
}
|
|
}
|
|
|
|
//
|
|
//###########################################################################
|
|
// TestInstance
|
|
//###########################################################################
|
|
//
|
|
void
|
|
Plug::TestInstance() const
|
|
{
|
|
Verify(IsDerivedFrom(DefaultData));
|
|
if (m_linkHead != NULL)
|
|
{
|
|
Check_Object(m_linkHead);
|
|
}
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// GetSocketCount
|
|
//#############################################################################
|
|
//
|
|
unsigned
|
|
Plug::GetSocketCount()
|
|
{
|
|
Check_Object(this);
|
|
|
|
Link *link = m_linkHead;
|
|
if (!link)
|
|
return 0;
|
|
unsigned socket_count = 0;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
++socket_count;
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_linkHead);
|
|
return socket_count;
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// RemoveSocket
|
|
//#############################################################################
|
|
//
|
|
void
|
|
Plug::RemoveSocket(Socket *m_socket)
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(m_socket);
|
|
|
|
Link *link = m_linkHead;
|
|
if (!link)
|
|
return;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
if (link->GetSocket() == m_socket)
|
|
{
|
|
link->Remove(this);
|
|
return;
|
|
}
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_linkHead);
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// RemoveSockets
|
|
//#############################################################################
|
|
//
|
|
void
|
|
Plug::RemoveAllSockets()
|
|
{
|
|
Check_Object(this);
|
|
|
|
Link *link = m_linkHead;
|
|
while (link)
|
|
{
|
|
Check_Object(link);
|
|
Link *next = link->m_nextPlugLink;
|
|
Check_Object(link);
|
|
link->Remove(this);
|
|
if (link == next)
|
|
break;
|
|
link = next;
|
|
}
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// IsSocketMember
|
|
//#############################################################################
|
|
//
|
|
bool
|
|
Plug::IsSocketMember(Socket *m_socket)
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(m_socket);
|
|
|
|
Link *link = m_linkHead;
|
|
if (!link)
|
|
return false;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
if (link->GetSocket() == m_socket)
|
|
return true;
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_linkHead);
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// RemoveSockets
|
|
//#############################################################################
|
|
//
|
|
void
|
|
Plug::RemoveAllChains()
|
|
{
|
|
Check_Object(this);
|
|
ChainLink *clink = m_chainLinkHead;
|
|
while (clink)
|
|
{
|
|
Check_Object(clink);
|
|
ChainLink *next = clink->m_nextPlugLink;
|
|
Check_Object(clink);
|
|
delete clink;
|
|
if (clink == next)
|
|
break;
|
|
clink = next;
|
|
}
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// RemoveChain
|
|
//#############################################################################
|
|
//
|
|
void
|
|
Plug::RemoveChain(Chain *m_chain)
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(m_chain);
|
|
|
|
ChainLink *link = m_chainLinkHead;
|
|
if (!link)
|
|
return;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
if (link->GetChain() == m_chain)
|
|
{
|
|
delete link;
|
|
return;
|
|
}
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_chainLinkHead);
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// IsChainMember
|
|
//#############################################################################
|
|
//
|
|
bool
|
|
Plug::IsChainMember(Chain *m_chain)
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(m_chain);
|
|
|
|
ChainLink *link = m_chainLinkHead;
|
|
if (!link)
|
|
return false;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
if (link->GetChain() == m_chain)
|
|
return true;
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_chainLinkHead);
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// GetSocketCount
|
|
//#############################################################################
|
|
//
|
|
unsigned
|
|
Plug::GetChainCount()
|
|
{
|
|
Check_Object(this);
|
|
|
|
ChainLink *link = m_chainLinkHead;
|
|
if (!link)
|
|
return 0;
|
|
unsigned count=0;
|
|
do
|
|
{
|
|
Check_Object(link);
|
|
++count;
|
|
link = link->m_nextPlugLink;
|
|
} while (link != m_chainLinkHead);
|
|
return count;
|
|
}
|