xref: /f-stack/app/micro_thread/mt_action.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 #ifndef __MT_ACTION_H__
20a9643ea8Slogwang #define __MT_ACTION_H__
21a9643ea8Slogwang 
22a9643ea8Slogwang #include <netinet/in.h>
23a9643ea8Slogwang #include <queue>
24a9643ea8Slogwang #include "mt_msg.h"
25a9643ea8Slogwang #include "mt_session.h"
26a9643ea8Slogwang #include "mt_notify.h"
27a9643ea8Slogwang 
28a9643ea8Slogwang namespace NS_MICRO_THREAD {
29a9643ea8Slogwang 
30a9643ea8Slogwang 
31a9643ea8Slogwang enum MULTI_STATE
32a9643ea8Slogwang {
33*35a81399Slogwang     MULTI_FLAG_UNDEF   = 0x0,
34*35a81399Slogwang     MULTI_FLAG_INIT    = 0x1,
35*35a81399Slogwang     MULTI_FLAG_OPEN    = 0x2,
36*35a81399Slogwang     MULTI_FLAG_SEND    = 0x4,
37*35a81399Slogwang     MULTI_FLAG_FIN     = 0x8,
38a9643ea8Slogwang };
39a9643ea8Slogwang 
40a9643ea8Slogwang enum MULTI_CONNECT
41a9643ea8Slogwang {
42a9643ea8Slogwang     CONN_UNKNOWN        = 0,
43*35a81399Slogwang     CONN_TYPE_SHORT     = 0x1,
44*35a81399Slogwang     CONN_TYPE_LONG      = 0x2,
45*35a81399Slogwang     CONN_TYPE_SESSION   = 0x4,
46a9643ea8Slogwang };
47a9643ea8Slogwang 
48a9643ea8Slogwang enum MULTI_ERROR
49a9643ea8Slogwang {
50a9643ea8Slogwang     ERR_NONE            =  0,
51*35a81399Slogwang     ERR_SOCKET_FAIL     = -1,
52*35a81399Slogwang     ERR_CONNECT_FAIL    = -2,
53*35a81399Slogwang     ERR_SEND_FAIL       = -3,
54*35a81399Slogwang     ERR_RECV_FAIL       = -4,
55*35a81399Slogwang     ERR_RECV_TIMEOUT    = -5,
56*35a81399Slogwang     ERR_KQUEUE_FAIL     = -6,
57*35a81399Slogwang     ERR_FRAME_ERROR     = -7,
58*35a81399Slogwang     ERR_PEER_CLOSE      = -8,
59*35a81399Slogwang     ERR_PARAM_ERROR     = -9,
60*35a81399Slogwang     ERR_MEMORY_ERROR    = -10,
61*35a81399Slogwang     ERR_ENCODE_ERROR    = -11,
62*35a81399Slogwang     ERR_DST_ADDR_ERROR  = -12,
63a9643ea8Slogwang };
64a9643ea8Slogwang 
65a9643ea8Slogwang 
66a9643ea8Slogwang class IMtAction : public ISession
67a9643ea8Slogwang {
68a9643ea8Slogwang public:
69a9643ea8Slogwang 
70a9643ea8Slogwang     IMtAction();
71a9643ea8Slogwang     virtual ~IMtAction();
72a9643ea8Slogwang 
SetMsgDstAddr(struct sockaddr_in * dst)73a9643ea8Slogwang     void SetMsgDstAddr(struct sockaddr_in* dst) {
74a9643ea8Slogwang         memcpy(&_addr, dst, sizeof(_addr));
75a9643ea8Slogwang     };
76a9643ea8Slogwang 
GetMsgDstAddr()77a9643ea8Slogwang     struct sockaddr_in* GetMsgDstAddr() {
78a9643ea8Slogwang         return &_addr;
79a9643ea8Slogwang     };
80a9643ea8Slogwang 
SetMsgBuffSize(int buff_size)81a9643ea8Slogwang     void SetMsgBuffSize(int buff_size) {
82a9643ea8Slogwang         _buff_size = buff_size;
83a9643ea8Slogwang     };
84a9643ea8Slogwang 
GetMsgBuffSize()85a9643ea8Slogwang     int GetMsgBuffSize()     {
86a9643ea8Slogwang         return (_buff_size > 0) ? _buff_size : 65535;
87a9643ea8Slogwang     }
88a9643ea8Slogwang 
SetSessionName(int name)89a9643ea8Slogwang     void SetSessionName(int name) {
90a9643ea8Slogwang         _ntfy_name = name;
91a9643ea8Slogwang     };
92a9643ea8Slogwang 
GetSessionName()93a9643ea8Slogwang     int GetSessionName()     {
94a9643ea8Slogwang         return _ntfy_name;
95a9643ea8Slogwang     }
96a9643ea8Slogwang 
SetProtoType(MULTI_PROTO proto)97a9643ea8Slogwang     void SetProtoType(MULTI_PROTO proto) {
98a9643ea8Slogwang         _proto = proto;
99a9643ea8Slogwang     };
100a9643ea8Slogwang 
GetProtoType()101a9643ea8Slogwang     MULTI_PROTO GetProtoType() {
102a9643ea8Slogwang         return _proto;
103a9643ea8Slogwang     };
104a9643ea8Slogwang 
SetConnType(MULTI_CONNECT type)105a9643ea8Slogwang     void SetConnType(MULTI_CONNECT type) {
106a9643ea8Slogwang         _conn_type = type;
107a9643ea8Slogwang     };
108a9643ea8Slogwang 
GetConnType()109a9643ea8Slogwang     MULTI_CONNECT GetConnType() {
110a9643ea8Slogwang         return _conn_type;
111a9643ea8Slogwang     };
112a9643ea8Slogwang 
SetErrno(MULTI_ERROR err)113a9643ea8Slogwang     void SetErrno(MULTI_ERROR err) {
114a9643ea8Slogwang         _errno = err;
115a9643ea8Slogwang     };
116a9643ea8Slogwang 
GetErrno()117a9643ea8Slogwang     MULTI_ERROR GetErrno() {
118a9643ea8Slogwang         return _errno;
119a9643ea8Slogwang     };
120a9643ea8Slogwang 
SetCost(int cost)121a9643ea8Slogwang     void SetCost(int cost) {
122a9643ea8Slogwang         _time_cost = cost;
123a9643ea8Slogwang     };
124a9643ea8Slogwang 
GetCost()125a9643ea8Slogwang     int GetCost() {
126a9643ea8Slogwang         return _time_cost;
127a9643ea8Slogwang     };
128a9643ea8Slogwang 
SetMsgFlag(MULTI_STATE flag)129a9643ea8Slogwang     void SetMsgFlag(MULTI_STATE flag) {
130a9643ea8Slogwang         _flag = flag;
131a9643ea8Slogwang     };
132a9643ea8Slogwang 
GetMsgFlag()133a9643ea8Slogwang     MULTI_STATE GetMsgFlag() {
134a9643ea8Slogwang         return _flag;
135a9643ea8Slogwang     };
136a9643ea8Slogwang 
SetIMsgPtr(IMtMsg * msg)137a9643ea8Slogwang     void SetIMsgPtr(IMtMsg* msg  ) {
138a9643ea8Slogwang         _msg = msg;
139a9643ea8Slogwang     };
140a9643ea8Slogwang 
GetIMsgPtr()141a9643ea8Slogwang     IMtMsg* GetIMsgPtr() {
142a9643ea8Slogwang         return _msg;
143a9643ea8Slogwang     };
144a9643ea8Slogwang 
SetIConnection(IMtConnection * conn)145a9643ea8Slogwang     void SetIConnection(IMtConnection* conn) {
146a9643ea8Slogwang         _conn = conn;
147a9643ea8Slogwang     };
148a9643ea8Slogwang 
GetIConnection()149a9643ea8Slogwang     IMtConnection* GetIConnection() {
150a9643ea8Slogwang         return _conn;
151a9643ea8Slogwang     };
152a9643ea8Slogwang 
153a9643ea8Slogwang     void Init();
154a9643ea8Slogwang 
155a9643ea8Slogwang     void Reset();
156a9643ea8Slogwang 
157a9643ea8Slogwang     KqueuerObj* GetNtfyObj();
158a9643ea8Slogwang 
159a9643ea8Slogwang     int InitConnEnv();
160a9643ea8Slogwang 
161a9643ea8Slogwang     int DoEncode();
162a9643ea8Slogwang     int DoInput();
163a9643ea8Slogwang     int DoProcess();
164a9643ea8Slogwang     int DoError();
165a9643ea8Slogwang 
166a9643ea8Slogwang public:
167a9643ea8Slogwang 
HandleEncode(void * buf,int & len,IMtMsg * msg)168a9643ea8Slogwang     virtual int HandleEncode(void* buf, int& len, IMtMsg* msg){return 0;};
169a9643ea8Slogwang 
HandleInput(void * buf,int len,IMtMsg * msg)170a9643ea8Slogwang     virtual int HandleInput(void* buf, int len, IMtMsg* msg){return 0;};
171a9643ea8Slogwang 
HandleProcess(void * buf,int len,IMtMsg * msg)172a9643ea8Slogwang     virtual int HandleProcess(void* buf, int len, IMtMsg* msg){return 0;};
173a9643ea8Slogwang 
HandleError(int err,IMtMsg * msg)174a9643ea8Slogwang     virtual int HandleError(int err, IMtMsg* msg){return 0;};
175a9643ea8Slogwang 
176a9643ea8Slogwang 
177a9643ea8Slogwang protected:
178a9643ea8Slogwang 
179*35a81399Slogwang     MULTI_STATE         _flag;
180*35a81399Slogwang     MULTI_PROTO         _proto;
181*35a81399Slogwang     MULTI_CONNECT       _conn_type;
182*35a81399Slogwang     MULTI_ERROR         _errno;
183*35a81399Slogwang     struct sockaddr_in  _addr;
184*35a81399Slogwang     int                 _time_cost;
185*35a81399Slogwang     int                 _buff_size;
186*35a81399Slogwang     int                 _ntfy_name;
187a9643ea8Slogwang 
188*35a81399Slogwang     IMtMsg*             _msg;
189*35a81399Slogwang     IMtConnection*      _conn;
190a9643ea8Slogwang };
191a9643ea8Slogwang 
192a9643ea8Slogwang }
193a9643ea8Slogwang 
194a9643ea8Slogwang #endif
195a9643ea8Slogwang 
196