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; }
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; }