玩家的管理
1) 所有的玩家连接对象从player对象池g_pPlayerPool中分配
2) 每个连接上的玩家分配给一个player对象
class Player
{
public :
Player( BOOL bIsServer=FALSE ) ;
virtual ~Player( ) ;
...................
virtual BOOL ProcessInput( ) ;
virtual BOOL ProcessOutput( ) ;
virtual BOOL ProcessCommand( BOOL Option = TRUE ) ;
protected :
//Player ID
//统一由PlayerPool管理
PlayerID_t m_PID ;
//在PlayerManager类中player id数组的下标
//PlayerManagerID用于标识当前玩家所在的某个PlayerManager中的位置信息,每个
//PlayerManager位于一个独立的线程里。
ID_t m_PlayerManagerID ;
//网络连接句柄
Socket* m_pSocket ;
//输入输出数据缓存
SocketInputStream* m_pSocketInputStream ;
SocketOutputStream* m_pSocketOutputStream ;
..................
};
player中放着玩家的socket句柄,输入输出的数据缓存区,和在玩家管理器中的位置等
当有数据到达时,ProcessInput 从网络读数据放到输入缓冲区,ProcessCommand在心跳时从缓冲区读取数据(组成协议包),做相应处理。
4) 刚连接上时,从玩家池从分配一个player对象之后,这个对象是记录在连接线程中(线程只是记录着玩家对象在pool中的位置),进入场景之后,从连接线程删除,放到相应的场景玩家管理器中,之后的通信都是和场景
1) 所有的玩家连接对象从player对象池g_pPlayerPool中分配
2) 每个连接上的玩家分配给一个player对象
class Player
{
public :
Player( BOOL bIsServer=FALSE ) ;
virtual ~Player( ) ;
...................
virtual BOOL ProcessInput( ) ;
virtual BOOL ProcessOutput( ) ;
virtual BOOL ProcessCommand( BOOL Option = TRUE ) ;
protected :
//Player ID
//统一由PlayerPool管理
PlayerID_t m_PID ;
//在PlayerManager类中player id数组的下标
//PlayerManagerID用于标识当前玩家所在的某个PlayerManager中的位置信息,每个
//PlayerManager位于一个独立的线程里。
ID_t m_PlayerManagerID ;
//网络连接句柄
Socket* m_pSocket ;
//输入输出数据缓存
SocketInputStream* m_pSocketInputStream ;
SocketOutputStream* m_pSocketOutputStream ;
..................
};
player中放着玩家的socket句柄,输入输出的数据缓存区,和在玩家管理器中的位置等
当有数据到达时,ProcessInput 从网络读数据放到输入缓冲区,ProcessCommand在心跳时从缓冲区读取数据(组成协议包),做相应处理。
4) 刚连接上时,从玩家池从分配一个player对象之后,这个对象是记录在连接线程中(线程只是记录着玩家对象在pool中的位置),进入场景之后,从连接线程删除,放到相应的场景玩家管理器中,之后的通信都是和场景