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 * @filename mt_api.h 22a9643ea8Slogwang */ 23a9643ea8Slogwang 24a9643ea8Slogwang #ifndef __MT_API_H__ 25a9643ea8Slogwang #define __MT_API_H__ 26a9643ea8Slogwang 27a9643ea8Slogwang #include <netinet/in.h> 28a9643ea8Slogwang #include <vector> 29a9643ea8Slogwang 30a9643ea8Slogwang using std::vector; 31a9643ea8Slogwang 32a9643ea8Slogwang namespace NS_MICRO_THREAD { 33a9643ea8Slogwang 34a9643ea8Slogwang int mt_udpsendrcv(struct sockaddr_in* dst, void* pkg, int len, void* rcv_buf, int& buf_size, int timeout); 35a9643ea8Slogwang 36a9643ea8Slogwang typedef int (*MtFuncTcpMsgLen)(void* buf, int len); 37a9643ea8Slogwang 38a9643ea8Slogwang int mt_tcpsendrcv(struct sockaddr_in* dst, void* pkg, int len, void* rcv_buf, int& buf_size, 39a9643ea8Slogwang int timeout, MtFuncTcpMsgLen chek_func); 40a9643ea8Slogwang 41a9643ea8Slogwang 42a9643ea8Slogwang enum MT_TCP_CONN_TYPE 43a9643ea8Slogwang { 445ac59bc4Slogwang MT_TCP_SHORT = 1, 455ac59bc4Slogwang MT_TCP_LONG = 2, 465ac59bc4Slogwang MT_TCP_SHORT_SNDONLY = 3, 475ac59bc4Slogwang MT_TCP_LONG_SNDONLY = 4, 48a9643ea8Slogwang MT_TCP_BUTT 49a9643ea8Slogwang }; 50a9643ea8Slogwang 51a9643ea8Slogwang int mt_tcpsendrcv_ex(struct sockaddr_in* dst, void* pkg, int len, void* rcv_buf, int* buf_size, 52a9643ea8Slogwang int timeout, MtFuncTcpMsgLen func, MT_TCP_CONN_TYPE type = MT_TCP_LONG); 53a9643ea8Slogwang 54a9643ea8Slogwang typedef int (*MtFuncTcpMsgChecker)(void* buf, int len, bool closed, void* msg_ctx, bool &msg_len_detected); 55a9643ea8Slogwang 56a9643ea8Slogwang 57a9643ea8Slogwang int mt_tcpsendrcv_ex(struct sockaddr_in* dst, void* pkg, int len, void*& rcv_buf, int& recv_pkg_size, 58a9643ea8Slogwang int timeout, MtFuncTcpMsgChecker check_func, void* msg_ctx=NULL, 59a9643ea8Slogwang MT_TCP_CONN_TYPE type = MT_TCP_LONG, bool keep_rcv_buf=false); 60a9643ea8Slogwang 615ac59bc4Slogwang 62a9643ea8Slogwang int mt_tcpsendrcv(struct sockaddr_in* dst, void* pkg, int len, void*& rcv_buf, int& recv_pkg_size, 63a9643ea8Slogwang int timeout, MtFuncTcpMsgChecker check_func, void* msg_ctx=NULL, bool keep_rcv_buf=false); 64a9643ea8Slogwang 65a9643ea8Slogwang 66a9643ea8Slogwang class IMtTask 67a9643ea8Slogwang { 68a9643ea8Slogwang public: 69a9643ea8Slogwang Process()70a9643ea8Slogwang virtual int Process() { return -1; }; 71a9643ea8Slogwang SetResult(int rc)72a9643ea8Slogwang void SetResult(int rc) 73a9643ea8Slogwang { 74a9643ea8Slogwang _result = rc; 75a9643ea8Slogwang } 76a9643ea8Slogwang GetResult(void)77a9643ea8Slogwang int GetResult(void) 78a9643ea8Slogwang { 79a9643ea8Slogwang return _result; 80a9643ea8Slogwang } 81a9643ea8Slogwang SetTaskType(int type)82a9643ea8Slogwang void SetTaskType(int type) 83a9643ea8Slogwang { 84a9643ea8Slogwang _type = type; 85a9643ea8Slogwang } 86a9643ea8Slogwang GetTaskType(void)87a9643ea8Slogwang int GetTaskType(void) 88a9643ea8Slogwang { 89a9643ea8Slogwang return _type; 90a9643ea8Slogwang } 91a9643ea8Slogwang IMtTask()92a9643ea8Slogwang IMtTask() {}; ~IMtTask()93a9643ea8Slogwang virtual ~IMtTask() {}; 94a9643ea8Slogwang 95a9643ea8Slogwang protected: 96a9643ea8Slogwang 975ac59bc4Slogwang int _type; 985ac59bc4Slogwang int _result; 99a9643ea8Slogwang }; 100a9643ea8Slogwang 101a9643ea8Slogwang typedef vector<IMtTask*> IMtTaskList; 102a9643ea8Slogwang 103a9643ea8Slogwang int mt_exec_all_task(IMtTaskList& req_list); 104a9643ea8Slogwang 105a9643ea8Slogwang void mt_sleep(int ms); 106a9643ea8Slogwang 107a9643ea8Slogwang unsigned long long mt_time_ms(void); 108a9643ea8Slogwang 109a9643ea8Slogwang void mt_set_msg_private(void *data); 110a9643ea8Slogwang 111a9643ea8Slogwang void* mt_get_msg_private(); 112a9643ea8Slogwang 113a02c88d6Slogwang bool mt_init_frame(int argc=0, char * const argv[]=NULL); 114a9643ea8Slogwang 115a9643ea8Slogwang void mt_set_stack_size(unsigned int bytes); 116a9643ea8Slogwang 117a9643ea8Slogwang int mt_recvfrom(int fd, void *buf, int len, int flags, struct sockaddr *from, socklen_t *fromlen, int timeout); 118a9643ea8Slogwang 119a9643ea8Slogwang int mt_sendto(int fd, const void *msg, int len, int flags, const struct sockaddr *to, int tolen, int timeout); 120a9643ea8Slogwang 121a9643ea8Slogwang int mt_connect(int fd, const struct sockaddr *addr, int addrlen, int timeout); 122a9643ea8Slogwang 123a9643ea8Slogwang int mt_accept(int fd, struct sockaddr *addr, socklen_t *addrlen, int timeout); 124a9643ea8Slogwang 125a9643ea8Slogwang ssize_t mt_read(int fd, void *buf, size_t nbyte, int timeout); 126a9643ea8Slogwang 127a9643ea8Slogwang ssize_t mt_write(int fd, const void *buf, size_t nbyte, int timeout); 128a9643ea8Slogwang 129a9643ea8Slogwang ssize_t mt_recv(int fd, void *buf, int len, int flags, int timeout); 130a9643ea8Slogwang 131a9643ea8Slogwang ssize_t mt_send(int fd, const void *buf, size_t nbyte, int flags, int timeout); 132a9643ea8Slogwang 133a9643ea8Slogwang int mt_wait_events(int fd, int events, int timeout); 134a9643ea8Slogwang 135a9643ea8Slogwang void* mt_start_thread(void* entry, void* args); 136a9643ea8Slogwang 137*84bcae25Swoolen void* mt_active_thread(); 138*84bcae25Swoolen 139*84bcae25Swoolen void mt_thread_wait(int ms); 140*84bcae25Swoolen 141*84bcae25Swoolen void mt_thread_wakeup_wait(void * thread_p); 142*84bcae25Swoolen 143*84bcae25Swoolen void mt_swap_thread(); 144*84bcae25Swoolen 145a9643ea8Slogwang } 146a9643ea8Slogwang 147a9643ea8Slogwang #endif 148a9643ea8Slogwang 149a9643ea8Slogwang 150