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