xref: /f-stack/app/micro_thread/mt_api.h (revision 84bcae25)
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