示例#1
0
Session* SessionMgr::CreateSession( SOCKET sock, const std::string& ip, int port )
{
	//add this session
	int sessionID = GenerateSessionID();
	if( 0 == sessionID )
	{
		LOG_ERROR( logger, __FUNCTION__ << " failed to generate session id!" );
		return NULL;
	}
	Session* pSession = s_SessionPool.AllocateSession( 
		sessionID,
		sock,
		ip,
		port
		);
	if( NULL == pSession )
	{
		LOG_ERROR( logger, __FUNCTION__ << " failed to allocate session from pool!" );
		return NULL;
	}
	if( !InsertSession( pSession ) )
	{
		LOG_ERROR( logger, __FUNCTION__ << " failed to insert session into SessionMgr!" );
		return NULL;
	}

	return pSession;
}
示例#2
0
static	void
SessionThread(
	void	*para)
{
	SessionCtrl *ctrl;
	GHashTable *hash;
ENTER_FUNC;
	workq = NewQueue();
	hash = NewNameHash();
	RecParserInit();
	while (TRUE) {
		ctrl = (SessionCtrl *)DeQueue(workq);
		switch (ctrl->type) {
		case SESSION_CONTROL_INSERT:
			InsertSession(hash,ctrl);
			break;
		case SESSION_CONTROL_UPDATE:
			UpdateSession(hash,ctrl);
			break;
		case SESSION_CONTROL_DELETE:
			DeleteSession(hash,ctrl);
			break;
		case SESSION_CONTROL_LOOKUP:
			LookupSession(hash,ctrl);
			break;
		case SESSION_CONTROL_GET_SESSION_NUM:
			GetSessionNum(hash,ctrl);
			break;
		case SESSION_CONTROL_GET_DATA:
			GetData(hash,ctrl);
			break;
		case SESSION_CONTROL_GET_MESSAGE:
			GetMessage(hash,ctrl);
			break;
		case SESSION_CONTROL_RESET_MESSAGE:
			ResetMessage(hash,ctrl);
			break;
		case SESSION_CONTROL_SET_MESSAGE:
			SetMessage(hash,ctrl);
			break;
		case SESSION_CONTROL_SET_MESSAGE_ALL:
			SetMessageAll(hash,ctrl);
			break;
		case SESSION_CONTROL_GET_DATA_ALL:
			GetDataAll(hash,ctrl);
			break;
		}
		EnQueue(ctrl->waitq,ctrl);
	}
	pthread_exit(NULL);
LEAVE_FUNC;
}