/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, 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/>.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/
#ifndef plRoomLoadNotifyMsg_inc
#define plRoomLoadNotifyMsg_inc

///////////////////////////////////////////////////////////////////
//
//  plRoomLoadNotifyMsg
//
//  This message is used to notify all those who are registered for this message
//  whenever the plClient has finished loading a Room.
//  Its up to the receiver to decide if they are interested in that particular room
//

#include "../pnMessage/plMessage.h"

class plRoomLoadNotifyMsg : public plMessage
{
protected:
	plKey	fRoomKey;
	UInt8	fWhat;

private:
	void IInit()
	{
		fRoomKey = nil;
		fWhat=kDontKnow;
		// we will only send this message to those who have registered for it
		SetBCastFlag(plMessage::kBCastByExactType);
	}
public:
	plRoomLoadNotifyMsg()
		: plMessage(nil, nil, nil) { IInit(); }
	plRoomLoadNotifyMsg(const plKey &s, 
				const plKey &r, 
				const double* t)
		: plMessage(s, r, t) { IInit(); }
	virtual ~plRoomLoadNotifyMsg() {;}

	CLASSNAME_REGISTER( plRoomLoadNotifyMsg );
	GETINTERFACE_ANY( plRoomLoadNotifyMsg, plMessage );

	enum NotifyType
	{
		kDontKnow=0,
		kLoaded,
		kUnloaded,
	};

	virtual void SetRoom(plKey &rkey) { fRoomKey = rkey; }
	virtual plKey GetRoom() { return fRoomKey; }
	virtual void SetWhatHappen(UInt8 what) { fWhat = what; }
	virtual UInt8 GetWhatHappen() { return fWhat; }

	// IO
	void Read(hsStream* stream, hsResMgr* mgr)
	{
		plMessage::IMsgRead(stream, mgr);
		fRoomKey = mgr->ReadKey(stream);
		fWhat = stream->ReadByte();
	}

	void Write(hsStream* stream, hsResMgr* mgr)
	{
		plMessage::IMsgWrite(stream, mgr);
		mgr->WriteKey(stream, fRoomKey);
		stream->WriteByte(fWhat);
	}
};


#endif // plRoomLoadNotifyMsg_inc