1a9643ea8Slogwang 2a9643ea8Slogwang /** 3a9643ea8Slogwang * Tencent is pleased to support the open source community by making MSEC available. 4a9643ea8Slogwang * 5a9643ea8Slogwang * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. 6a9643ea8Slogwang * 7a9643ea8Slogwang * Licensed under the GNU General Public License, Version 2.0 (the "License"); 8a9643ea8Slogwang * you may not use this file except in compliance with the License. You may 9a9643ea8Slogwang * obtain a copy of the License at 10a9643ea8Slogwang * 11a9643ea8Slogwang * https://opensource.org/licenses/GPL-2.0 12a9643ea8Slogwang * 13a9643ea8Slogwang * Unless required by applicable law or agreed to in writing, software distributed under the 14a9643ea8Slogwang * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 15a9643ea8Slogwang * either express or implied. See the License for the specific language governing permissions 16a9643ea8Slogwang * and limitations under the License. 17a9643ea8Slogwang */ 18a9643ea8Slogwang 19a9643ea8Slogwang 20a9643ea8Slogwang /** 21a9643ea8Slogwang * @file mt_session.h 22a9643ea8Slogwang * @time 20130924 23a9643ea8Slogwang **/ 24a9643ea8Slogwang 25a9643ea8Slogwang #ifndef __MT_SESSION_H__ 26a9643ea8Slogwang #define __MT_SESSION_H__ 27a9643ea8Slogwang 28a9643ea8Slogwang #include "hash_list.h" 29a9643ea8Slogwang 30a9643ea8Slogwang namespace NS_MICRO_THREAD { 31a9643ea8Slogwang 32a9643ea8Slogwang class MicroThread; 33a9643ea8Slogwang class IMtConnection; 34a9643ea8Slogwang 35a9643ea8Slogwang enum SESSION_FLAG 36a9643ea8Slogwang { 37*35a81399Slogwang SESSION_IDLE = 0, 38*35a81399Slogwang SESSION_INUSE = 1, 39a9643ea8Slogwang }; 40a9643ea8Slogwang 41a9643ea8Slogwang class ISession : public HashKey 42a9643ea8Slogwang { 43a9643ea8Slogwang public: 44a9643ea8Slogwang ISession()45a9643ea8Slogwang ISession() : _session_id(0), _session_flg(0), _thread(NULL), _connection(NULL) {}; 46a9643ea8Slogwang virtual ~ISession(); 47a9643ea8Slogwang 48a9643ea8Slogwang public: 49a9643ea8Slogwang SetSessionId(int id)50a9643ea8Slogwang void SetSessionId(int id) { 51a9643ea8Slogwang _session_id = id; 52a9643ea8Slogwang }; GetSessionId()53a9643ea8Slogwang int GetSessionId() { 54a9643ea8Slogwang return _session_id; 55a9643ea8Slogwang }; 56a9643ea8Slogwang GetOwnerThread()57a9643ea8Slogwang MicroThread* GetOwnerThread(){ 58a9643ea8Slogwang return _thread; 59a9643ea8Slogwang }; SetOwnerThread(MicroThread * thread)60a9643ea8Slogwang void SetOwnerThread(MicroThread* thread) { 61a9643ea8Slogwang _thread = thread; 62a9643ea8Slogwang }; 63a9643ea8Slogwang GetSessionConn()64a9643ea8Slogwang IMtConnection* GetSessionConn(){ 65a9643ea8Slogwang return _connection; 66a9643ea8Slogwang }; SetSessionConn(IMtConnection * conn)67a9643ea8Slogwang void SetSessionConn(IMtConnection* conn) { 68a9643ea8Slogwang _connection = conn; 69a9643ea8Slogwang }; 70a9643ea8Slogwang SetSessionFlag(int flag)71a9643ea8Slogwang void SetSessionFlag(int flag) { 72a9643ea8Slogwang _session_flg = flag; 73a9643ea8Slogwang }; GetSessionFlag()74a9643ea8Slogwang int GetSessionFlag() { 75a9643ea8Slogwang return _session_flg; 76a9643ea8Slogwang }; 77a9643ea8Slogwang HashValue()78a9643ea8Slogwang virtual uint32_t HashValue(){ 79a9643ea8Slogwang return _session_id; 80a9643ea8Slogwang }; 81a9643ea8Slogwang HashCmp(HashKey * rhs)82a9643ea8Slogwang virtual int HashCmp(HashKey* rhs){ 83a9643ea8Slogwang return this->_session_id - (int)rhs->HashValue(); 84a9643ea8Slogwang }; 85a9643ea8Slogwang 86a9643ea8Slogwang protected: 87a9643ea8Slogwang 88*35a81399Slogwang int _session_id; 89*35a81399Slogwang int _session_flg; 90*35a81399Slogwang MicroThread* _thread; 91*35a81399Slogwang IMtConnection* _connection; 92a9643ea8Slogwang }; 93a9643ea8Slogwang 94a9643ea8Slogwang class SessionMgr 95a9643ea8Slogwang { 96a9643ea8Slogwang public: 97a9643ea8Slogwang 98a9643ea8Slogwang static SessionMgr* Instance (void); 99a9643ea8Slogwang 100a9643ea8Slogwang static void Destroy(); 101a9643ea8Slogwang GetSessionId(void)102a9643ea8Slogwang int GetSessionId(void) { 103a9643ea8Slogwang _curr_session++; 104a9643ea8Slogwang if (!_curr_session) { 105a9643ea8Slogwang _curr_session++; 106a9643ea8Slogwang } 107a9643ea8Slogwang return _curr_session; 108a9643ea8Slogwang }; 109a9643ea8Slogwang 110a9643ea8Slogwang int InsertSession(ISession* session); 111a9643ea8Slogwang 112a9643ea8Slogwang ISession* FindSession(int session_id); 113a9643ea8Slogwang 114a9643ea8Slogwang void RemoveSession(int session_id); 115a9643ea8Slogwang 116a9643ea8Slogwang ~SessionMgr(); 117a9643ea8Slogwang 118a9643ea8Slogwang private: 119a9643ea8Slogwang 120a9643ea8Slogwang SessionMgr(); 121a9643ea8Slogwang 122*35a81399Slogwang static SessionMgr * _instance; 123*35a81399Slogwang int _curr_session; 124*35a81399Slogwang HashList* _hash_map; 125a9643ea8Slogwang }; 126a9643ea8Slogwang 127a9643ea8Slogwang } 128a9643ea8Slogwang 129a9643ea8Slogwang #endif 130