///////////////////////////////////////////////////////////
///////////////// Have an itch? Scratch it! ///////////////
///////////////////////// SCRATCH /////////////////////////
///////////////////// A MUD Server ////////////////////
///////////////////// By: Jared Devall ////////////////////
///////////////////// Thanks: ////////////////////
///////////////////// DIKU/Merc/ROM ////////////////////
///////////////////// Aetas/Deus Gang ////////////////////
///////////////////// Beej ////////////////////
///////////////////////////////////////////////////////////
#ifndef __WORLD_H_
#define __WORLD_H_
#include "avatar.h"
#include "timer.h"
#include "smysql.h"
#include <list>
#include <queue>
enum BROADCAST_TYPE { ALL, WCONNECTED };
class World {
bool _worldExists;
typedef std::priority_queue<Timer *, std::vector<Timer *>, timer_less> TimerQueue;
void FlushOutput( void );
void UpdateAvatars( void );
void KillFlaggedAvatars( void );
void HandleInput( void );
void UpdateTimers();
void Schedule( Timer * );
void Unschedule( Timer * );
TimerQueue _timers;
public:
Avatar * FindAvatar ( const std::string & );
void Broadcast( const std::string &, BROADCAST_TYPE );
void Exist( const std::string &, int port, bool copyover );
void Die( void );
void Copyover( void );
void CopyoverRecovery( void );
void Monitor( void );
static World &Instance();
std::list< Avatar * > _avatarList;
};
// Our singleton instance
inline World &World::Instance() {
static World instance;
return instance;
}
#endif