xref: /f-stack/app/micro_thread/mt_session.h (revision 35a81399)
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