//===========================================================================// // File: Replicator.hpp // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 11/29/94 JMA Initial coding. // // 08/25/97 JMA Infrastructure changes // // 08/25/97 ECH Infrastructure changes // //---------------------------------------------------------------------------// // Copyright (C) 1994-97, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // // This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // //===========================================================================// #pragma once #include "Adept.hpp" #include "Receiver.hpp" #include "Connection.hpp" namespace Adept { //########################################################################## //################## Replicator::CreateMessage ####################### //########################################################################## class Replicator__ClassData; class Replicator__CreateMessage: public Connection__Message { public: Stuff::RegisteredClass::ClassID classID; int replicatorFlags; ReplicatorID replicatorID; Replicator__CreateMessage( size_t length, int priority, int message_flags, Stuff::RegisteredClass::ClassID class_id, int replicator_flags ): Connection__Message( Connection::ReplicateMessageID, length, priority, message_flags ), classID(class_id), replicatorFlags(replicator_flags), replicatorID(ReplicatorID::Null) {} class Script { public: void TestInstance() const {} Stuff::MemoryStream *messageStream; Stuff::Page *instancePage; ReplicatorID *baseID; Replicator__ClassData *classData; Resource modelResource; }; typedef void (*Factory)(Script *script); static void ConstructCreateMessage(Script *script); }; //########################################################################## //##################### Replicator::Message ########################## //########################################################################## class Replicator__Message: public Receiver__Message { public: ReplicatorID replicatorID; enum { ReplicantCanReceiveBit = 1<(replicatorFlags & ReplicatorModeMask);} void SetReplicatorMode(ReplicatorMode mode) {Check_Object(this); replicatorFlags &= ~ReplicatorModeMask; replicatorFlags |= mode;} int replicatorFlags; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Ownership support // public: const ReplicatorID& GetReplicatorID() {Check_Object(this); return replicatorID;} Connection* GetOwner() {Check_Object(this); return owningConnection;} protected: ReplicatorID replicatorID; Connection* owningConnection; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Test Support // public: void TestInstance(); static bool TestClass(); }; //########################################################################## //################### Replicator::ClassData ########################## //########################################################################## class Replicator__ClassData: public Receiver__ClassData { public: Replicator__ClassData( Stuff::RegisteredClass::ClassID class_id, const char* class_name, Receiver::ClassData *parent_class, int message_count, const Receiver::MessageEntry *message_handlers, Replicator::Factory replicator_factory, Replicator::CreateMessage::Factory message_factory ): Receiver__ClassData( class_id, class_name, parent_class, message_count, message_handlers ), replicatorFactory(replicator_factory), messageFactory(message_factory) {} Replicator::Factory replicatorFactory; Replicator::CreateMessage::Factory messageFactory; void TestInstance(); }; inline Replicator::ClassData* Replicator::GetClassData() { return Cast_Pointer(ClassData*, classData); } }