Files
dl/document/html/dl__net_8h_source.html
T
2026-09-16 14:07:40 +08:00

590 lines
102 KiB
HTML
Vendored
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>dl: D:/dl/dl/io/dl_net.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">dl
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',false,false,'search.php','搜索',false);
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_17297ffb27ce571941f5fb5008f01a1f.html">dl</a></li><li class="navelem"><a class="el" href="dir_8618662f707661daa8368f9a64c30c2e.html">io</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">dl_net.h</div></div>
</div><!--header-->
<div class="contents">
<a href="dl__net_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;<a class="code" href="dl__log_8h.html">io/dl_log.h</a>&quot;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;<a class="code" href="dl__string_8h.html">base/dl_string.h</a>&quot;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;<a class="code" href="dl__thread_8h.html">system/dl_thread.h</a>&quot;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;<a class="code" href="dl__list__mt_8h.html">base/dl_list_mt.h</a>&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;magic_enum/magic_enum.hpp&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedl.html">dl</a></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span>{</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="namespacedl.html#ab3d71bb32d1125d625ae47d1bbff70a6"> 24</a></span><span class="keyword">constexpr</span> uint8_t <a class="code hl_variable" href="namespacedl.html#ab3d71bb32d1125d625ae47d1bbff70a6">NETWORK_MESSAGE_TAG</a> = 0x1e;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="namespacedl.html#a2db41536860e9b74589076e004e5d804"> 25</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#a2db41536860e9b74589076e004e5d804">NETWORK_LOG_CLIENT</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4"> 26</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4">NETWORK_LOG_SERVER</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="namespacedl.html#ab5f28d4a7219a7176de90d8227ca08ae"> 27</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#ab5f28d4a7219a7176de90d8227ca08ae">NETWORK_LOG_CLIENT_UDP</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="namespacedl.html#a516228c6e606de7787651c408b475037"> 28</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#a516228c6e606de7787651c408b475037">NETWORK_LOG_SERVER_UDP</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="namespacedl.html#a552ca554240a773aceefb009625e246c"> 31</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#a552ca554240a773aceefb009625e246c">NETWORK_LOG_LOW</a> = <span class="keyword">true</span>; <span class="comment">// 更底层的上下行日志(write、read完成后)</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="namespacedl.html#a552ca554240a773aceefb009625e246c">NETWORK_LOG_LOW</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="foldopen" id="foldopen00037" data-start="{" data-end="};">
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="structdl_1_1_message_type.html"> 37</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_message_type.html">MessageType</a></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>{</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span></div>
<div class="foldopen" id="foldopen00043" data-start="{" data-end="};">
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html"> 43</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_msg_head.html">MsgHead</a></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>{</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b"> 45</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">_id</a>; </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#a6115e5168538daf581da8380f8e01cec"> 46</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#a6115e5168538daf581da8380f8e01cec">_size</a>; </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#ad7f4de649c6b9de472b98998cf7bb6a5"> 47</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#ad7f4de649c6b9de472b98998cf7bb6a5">_check</a>; </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#a728b8cecedc8e6db4961fc23e8ee32bb"> 48</a></span> uint8_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#a728b8cecedc8e6db4961fc23e8ee32bb">_compress</a>; </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#a1ccb9f07cda2eee615fe9d96f743bb8b"> 49</a></span> uint8_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#a1ccb9f07cda2eee615fe9d96f743bb8b">_magic</a>; </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structdl_1_1_msg_head.html#ac8fcf3ed85b8d943cc0bdbb70f014fee"> 50</a></span> uint8_t <a class="code hl_variable" href="structdl_1_1_msg_head.html#ac8fcf3ed85b8d943cc0bdbb70f014fee">_pad</a>;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span>};</div>
</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span></div>
<div class="foldopen" id="foldopen00053" data-start="{" data-end="};">
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structdl_1_1_udp_message.html"> 53</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_udp_message.html">UdpMessage</a></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>{</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="structdl_1_1_udp_message.html#a801797e91b9237d8cac72d495d15f25c"> 55</a></span> std::string <a class="code hl_variable" href="structdl_1_1_udp_message.html#a801797e91b9237d8cac72d495d15f25c">_ip</a>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structdl_1_1_udp_message.html#aa771dc19c8aff5e01405fa3fc2763dcd"> 56</a></span> uint16_t <a class="code hl_variable" href="structdl_1_1_udp_message.html#aa771dc19c8aff5e01405fa3fc2763dcd">_port</a>;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structdl_1_1_udp_message.html#a1667d2c1b7be685bb72e6018436ba502"> 57</a></span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> <a class="code hl_variable" href="structdl_1_1_udp_message.html#a1667d2c1b7be685bb72e6018436ba502">_buf</a>;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>};</div>
</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span></div>
<div class="foldopen" id="foldopen00060" data-start="{" data-end="};">
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message.html"> 60</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_tcp_message.html">TcpMessage</a></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>{</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99"> 62</a></span> <a class="code hl_struct" href="structdl_1_1_msg_head.html">MsgHead</a> <a class="code hl_variable" href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99">_head</a>;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message.html#a245e92e68a95c8ce20c63571c30f7a10"> 63</a></span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> <a class="code hl_variable" href="structdl_1_1_tcp_message.html#a245e92e68a95c8ce20c63571c30f7a10">_buf</a>;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span>&lt;IsEnum E&gt;</div>
<div class="foldopen" id="foldopen00066" data-start="{" data-end="}">
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message.html#ab3305383f6428d4b030847cc7a79f800"> 66</a></span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> <a class="code hl_function" href="structdl_1_1_tcp_message.html#ab3305383f6428d4b030847cc7a79f800">GetMsgId</a>(uint32_t <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">auto</span> msg_id_opt = magic_enum::enum_cast&lt;E&gt;(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (!msg_id_opt.has_value())</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(<span class="stringliteral">&quot;未知协议id{}&quot;</span>, <span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> {};</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> msg_id_opt.value();</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> }</div>
</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>};</div>
</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="foldopen" id="foldopen00078" data-start="{" data-end="};">
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message_server.html"> 78</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_tcp_message_server.html">TcpMessageServer</a></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>{</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6"> 80</a></span> <a class="code hl_struct" href="structdl_1_1_msg_head.html">MsgHead</a> <a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6">_head</a>;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message_server.html#af46b12991cc4f2731135aa683fe8a671"> 81</a></span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> <a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#af46b12991cc4f2731135aa683fe8a671">_buf</a>;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message_server.html#affb88b0538a52e3969e9dfeaac6d148f"> 82</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#affb88b0538a52e3969e9dfeaac6d148f">_socketId</a>;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span>&lt;IsEnum E&gt;</div>
<div class="foldopen" id="foldopen00085" data-start="{" data-end="}">
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="structdl_1_1_tcp_message_server.html#a562b592a2cdd59a81547f930be692b53"> 85</a></span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> <a class="code hl_function" href="structdl_1_1_tcp_message_server.html#a562b592a2cdd59a81547f930be692b53">GetMsgId</a>(uint32_t <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> {</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">auto</span> msg_id_opt = magic_enum::enum_cast&lt;E&gt;(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span> (!msg_id_opt.has_value())</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(<span class="stringliteral">&quot;未知协议id{}&quot;</span>, <span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> {};</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">return</span> msg_id_opt.value();</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span>};</div>
</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="namespacedl.html#ab13de2fc885706c4479dfceb8b687418"> 97</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedl.html#ab13de2fc885706c4479dfceb8b687418">BufferList</a> = <a class="code hl_class" href="classdl_1_1_list_multi_thread.html">ListMultiThread&lt;Buffer&gt;</a>;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="namespacedl.html#a6803cf9f8b270323f2f2d20ece6e13fc"> 98</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedl.html#a6803cf9f8b270323f2f2d20ece6e13fc">UdpMessageList</a> = <a class="code hl_class" href="classdl_1_1_list_multi_thread.html">ListMultiThread&lt;UdpMessage&gt;</a>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="namespacedl.html#a84fe10fd60bc70214e049ed2c22b8cf6"> 99</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedl.html#a84fe10fd60bc70214e049ed2c22b8cf6">TcpMessageList</a> = <a class="code hl_class" href="classdl_1_1_list_multi_thread.html">ListMultiThread&lt;TcpMessage&gt;</a>;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keyword">class </span>ClientImp;</div>
<div class="foldopen" id="foldopen00103" data-start="{" data-end="};">
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html"> 103</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_client.html#acc08dbb74c6c0b3f35c177d18c032c89">Client</a></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>{</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#afd660ffdaa68934886e9e685616df095"> 106</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_client.html#afd660ffdaa68934886e9e685616df095">Connent</a>(std::string_view ip, uint16_t port);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">template</span>&lt;IsEnum E, IsPod T&gt;</div>
<div class="foldopen" id="foldopen00109" data-start="{" data-end="}">
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351"> 109</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">Send</a>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> msg_id, <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>&amp; a)</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> {</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf = <a class="code hl_function" href="namespacedl.html#af4c74bce1ba7b07a5aee7bc403f0ea25">CreateBufferView</a>(a);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="namespacedl.html#a2db41536860e9b74589076e004e5d804">NETWORK_LOG_CLIENT</a>)</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> {</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// 检测消息枚举</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="stringliteral">&quot;Send-&gt;[{}]\n&quot;</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="stringliteral">&quot;消息id{}\n&quot;</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="stringliteral">&quot;数据大小:{}\n&quot;</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="stringliteral">&quot;{}&quot;</span>,</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_function" href="classdl_1_1_client.html#ae7bb057346b78deef5e8b8e27925027f">GetRemoteAddressString</a>(),</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> magic_enum::enum_name(msg_id),</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> buf.<a class="code hl_function" href="classdl_1_1_buffer_view.html#a1713eb619dfa95a8c0a4b6516cc6bde6">size</a>(),</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_function" href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">to_string_auto</a>(buf));</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_function" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">Send</a>((uint32_t)msg_id, buf);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">template</span>&lt;IsEnum E&gt;</div>
<div class="foldopen" id="foldopen00128" data-start="{" data-end="}">
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#a366c9bdfcf64732cfed3360e5239c1f1"> 128</a></span> <a class="code hl_struct" href="structdl_1_1_tcp_message.html">TcpMessage</a>* <a class="code hl_function" href="classdl_1_1_client.html#a366c9bdfcf64732cfed3360e5239c1f1">GetPopMsg</a>()</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_struct" href="structdl_1_1_tcp_message.html">TcpMessage</a>* msg = <a class="code hl_function" href="classdl_1_1_client.html#a366c9bdfcf64732cfed3360e5239c1f1">GetPopMsg</a>();</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span> (!msg)</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="namespacedl.html#a2db41536860e9b74589076e004e5d804">NETWORK_LOG_CLIENT</a>)</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// 检测消息枚举</span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">auto</span> msg_id_opt = magic_enum::enum_cast&lt;E&gt;(msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">_id</a>);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (!msg_id_opt.has_value())</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> {</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_define" href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a>(<span class="stringliteral">&quot;未知协议:{}&quot;</span>, msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">_id</a>);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> }</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> msg_id = msg_id_opt.value();</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="stringliteral">&quot;GetPopMsg&lt;-[{}]\n&quot;</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="stringliteral">&quot;消息id{}\n&quot;</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="stringliteral">&quot;数据大小:{}\n&quot;</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="stringliteral">&quot;{}&quot;</span>,</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <a class="code hl_function" href="classdl_1_1_client.html#ae7bb057346b78deef5e8b8e27925027f">GetRemoteAddressString</a>(),</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> magic_enum::enum_name(msg_id),</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#a6115e5168538daf581da8380f8e01cec">_size</a>,</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_function" href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">to_string_auto</a>(msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message.html#a245e92e68a95c8ce20c63571c30f7a10">_buf</a>));</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#ae7bb057346b78deef5e8b8e27925027f"> 159</a></span> std::string <a class="code hl_function" href="classdl_1_1_client.html#ae7bb057346b78deef5e8b8e27925027f">GetRemoteAddressString</a>();</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#acc08dbb74c6c0b3f35c177d18c032c89"> 161</a></span> <a class="code hl_function" href="classdl_1_1_client.html#acc08dbb74c6c0b3f35c177d18c032c89">Client</a>();</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classdl_1_1_client.html#a5f64918ddde2005d5b31749310d92de5"> 162</a></span> <a class="code hl_function" href="classdl_1_1_client.html#a5f64918ddde2005d5b31749310d92de5">~Client</a>();</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> ClientImp* _imp;</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _tSend;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _tRecv;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> std::atomic_bool _bEnd;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> std::atomic_bool _bValid;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_typedef" href="namespacedl.html#a84fe10fd60bc70214e049ed2c22b8cf6">TcpMessageList</a> _bufListSend;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <a class="code hl_typedef" href="namespacedl.html#a84fe10fd60bc70214e049ed2c22b8cf6">TcpMessageList</a> _bufListRecv;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <a class="code hl_struct" href="structdl_1_1_tcp_message.html">TcpMessage</a> _msgTemp;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_send(<span class="keywordtype">void</span>*);<span class="comment">// 发送线程</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_recv(<span class="keywordtype">void</span>*);<span class="comment">// 接收线程</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">Send</a>(uint32_t msg_id, <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">Send</a>(uint32_t msg_id, <span class="keyword">const</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a>&amp; buf)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_function" href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">Send</a>(msg_id, <a class="code hl_function" href="namespacedl.html#af4c74bce1ba7b07a5aee7bc403f0ea25">CreateBufferView</a>(buf));</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> }</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_struct" href="structdl_1_1_tcp_message.html">TcpMessage</a>* <a class="code hl_function" href="classdl_1_1_client.html#a366c9bdfcf64732cfed3360e5239c1f1">GetPopMsg</a>()</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> {</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> (_bufListRecv.<a class="code hl_function" href="classdl_1_1_list_multi_thread.html#a2dc53318ebb2b89b3d4b4a5b5399a077">PopFront</a>(_msgTemp))</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span> &amp;_msgTemp;</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">bool</span> _check_valid()</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">if</span> (_bValid)</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <a class="code hl_define" href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a>(<span class="stringliteral">&quot;未调用 Connent,或无网络权限,后续调用无效!&quot;</span>);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span>};</div>
</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="keyword">class </span>ServerImp;</div>
<div class="foldopen" id="foldopen00203" data-start="{" data-end="};">
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html"> 203</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_server.html#af909de52c5d28ab7c5aa196302ba7f99">Server</a></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span>{</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a572a4908be95e5d78ec0d0cfb5bdd168"> 207</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="classdl_1_1_server.html#a572a4908be95e5d78ec0d0cfb5bdd168">CbDisconnect</a> = std::function&lt;void(<span class="keywordtype">int</span>)&gt; ;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a994ecaed74e2839873b615c13916b242"> 209</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_server.html#a994ecaed74e2839873b615c13916b242">Accept</a>(uint16_t port);</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a33caeb7456ac8649ebf09d1d5e202d9a"> 210</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_server.html#a33caeb7456ac8649ebf09d1d5e202d9a">Run</a>();</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#afa6aa6578a2a292d8c33a31c5b8521f1"> 213</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_server.html#afa6aa6578a2a292d8c33a31c5b8521f1">SetCbDisconnect</a>(<a class="code hl_typedef" href="classdl_1_1_server.html#a572a4908be95e5d78ec0d0cfb5bdd168">CbDisconnect</a> func);</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">template</span>&lt;IsEnum E, IsPod T&gt;</div>
<div class="foldopen" id="foldopen00217" data-start="{" data-end="}">
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a61802a86c9e05dfce3526b83e1030b62"> 217</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_server.html#a61802a86c9e05dfce3526b83e1030b62">Send</a>(<span class="keywordtype">int</span> sokect_id, <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> msg_id, <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>&amp; a)</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> {</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf = <a class="code hl_function" href="namespacedl.html#af4c74bce1ba7b07a5aee7bc403f0ea25">CreateBufferView</a>(a);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4">NETWORK_LOG_SERVER</a>)</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="stringliteral">&quot;Send-&gt;[{}]\n&quot;</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="stringliteral">&quot;消息id{}\n&quot;</span></div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="stringliteral">&quot;数据大小:{}\n&quot;</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="stringliteral">&quot;{}&quot;</span>,</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <a class="code hl_function" href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950">GetRemoteAddressString</a>(sokect_id),</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> magic_enum::enum_name(msg_id),</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> buf.<a class="code hl_function" href="classdl_1_1_buffer_view.html#a1713eb619dfa95a8c0a4b6516cc6bde6">size</a>(),</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <a class="code hl_function" href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">to_string_auto</a>(buf));</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> }</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> _send_imp(sokect_id, (uint32_t)msg_id, buf);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">template</span>&lt;IsEnum E, IsNotPod T&gt;</div>
<div class="foldopen" id="foldopen00236" data-start="{" data-end="}">
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a61802a86c9e05dfce3526b83e1030b62"> 236</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_server.html#a61802a86c9e05dfce3526b83e1030b62">Send</a>(<span class="keywordtype">int</span> sokect_id, <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> msg_id, <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>&amp; a)</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> {</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf = a.ToBuffer();</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4">NETWORK_LOG_SERVER</a>)</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="stringliteral">&quot;Send-&gt;[{}]\n&quot;</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="stringliteral">&quot;消息id{}\n&quot;</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="stringliteral">&quot;数据大小:{}\n&quot;</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="stringliteral">&quot;{}&quot;</span>,</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <a class="code hl_function" href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950">GetRemoteAddressString</a>(sokect_id),</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> magic_enum::enum_name(msg_id),</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> buf.<a class="code hl_function" href="classdl_1_1_buffer.html#a03d432457c957dc01a3f414be21e0c0e">size</a>(),</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <a class="code hl_function" href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">to_string_auto</a>(buf));</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> _send_imp(sokect_id, (uint32_t)msg_id, buf);</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> }</div>
</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a363b939f2004866cc61d6f8641b64b53"> 254</a></span> std::string <a class="code hl_function" href="classdl_1_1_server.html#a363b939f2004866cc61d6f8641b64b53">GetIp</a>();</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a442d952037057f72e5bede777475e491"> 255</a></span> uint16_t <a class="code hl_function" href="classdl_1_1_server.html#a442d952037057f72e5bede777475e491">GetPort</a>();</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">template</span>&lt;IsEnum E&gt;</div>
<div class="foldopen" id="foldopen00258" data-start="{" data-end="}">
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a9e41bbdda64c34a34d08986291272ee6"> 258</a></span> <a class="code hl_struct" href="structdl_1_1_tcp_message_server.html">TcpMessageServer</a>* <a class="code hl_function" href="classdl_1_1_server.html#a9e41bbdda64c34a34d08986291272ee6">GetPopMsg</a>()</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> {</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <a class="code hl_struct" href="structdl_1_1_tcp_message_server.html">TcpMessageServer</a>* msg = _get_pop_msg();</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span> (!msg)</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4">NETWORK_LOG_SERVER</a>)</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> {</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// 检测消息枚举</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">auto</span> msg_id_opt = magic_enum::enum_cast&lt;E&gt;(msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">_id</a>);</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span> (!msg_id_opt.has_value())</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> {</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_define" href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a>(<span class="stringliteral">&quot;未知协议:{}&quot;</span>, msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">_id</a>);</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> }</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">E</a> msg_id = msg_id_opt.value();</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_define" href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a>(</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="stringliteral">&quot;GetPopMsg&lt;-[{}]\n&quot;</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="stringliteral">&quot;消息id{}\n&quot;</span></div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="stringliteral">&quot;数据大小:{}\n&quot;</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="stringliteral">&quot;{}&quot;</span>,</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <a class="code hl_function" href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950">GetRemoteAddressString</a>(msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#affb88b0538a52e3969e9dfeaac6d148f">_socketId</a>),</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> magic_enum::enum_name(msg_id),</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6">_head</a>.<a class="code hl_variable" href="structdl_1_1_msg_head.html#a6115e5168538daf581da8380f8e01cec">_size</a>,</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_function" href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">to_string_auto</a>(msg-&gt;<a class="code hl_variable" href="structdl_1_1_tcp_message_server.html#af46b12991cc4f2731135aa683fe8a671">_buf</a>));</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> }</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> }</div>
</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950"> 287</a></span> std::string <a class="code hl_function" href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950">GetRemoteAddressString</a>(<span class="keywordtype">int</span> socket_id);</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#af909de52c5d28ab7c5aa196302ba7f99"> 289</a></span> <a class="code hl_function" href="classdl_1_1_server.html#af909de52c5d28ab7c5aa196302ba7f99">Server</a>();</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"><a class="line" href="classdl_1_1_server.html#add34e05251e585f0a2c66c81cdd7451c"> 290</a></span> <a class="code hl_function" href="classdl_1_1_server.html#add34e05251e585f0a2c66c81cdd7451c">~Server</a>();</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> ServerImp* _imp;</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _t;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <a class="code hl_struct" href="structdl_1_1_tcp_message_server.html">TcpMessageServer</a> _msgTemp;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_run(<span class="keywordtype">void</span>*);</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">void</span> _send_imp(<span class="keywordtype">int</span> sokect_id, uint32_t msg_id, <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf);</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <a class="code hl_struct" href="structdl_1_1_tcp_message_server.html">TcpMessageServer</a>* _get_pop_msg();</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span>};</div>
</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="keyword">class </span>ClientUdpImp;</div>
<div class="foldopen" id="foldopen00306" data-start="{" data-end="};">
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html"> 306</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_client_udp.html#a94353a4dbdee55425863697608e59ec6">ClientUdp</a></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span>{</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#af6a2a2d63c5faaa60b00cb6d980d98d4"> 309</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client_udp.html#af6a2a2d63c5faaa60b00cb6d980d98d4">SetAddress</a>(std::string_view ip, uint16_t port, <span class="keywordtype">bool</span> broadcast = <span class="keyword">false</span>);</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#a46d0906e5e9a739dfec4027ae596c4ef"> 310</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client_udp.html#a46d0906e5e9a739dfec4027ae596c4ef">Send</a>(<a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf);</div>
<div class="foldopen" id="foldopen00311" data-start="{" data-end="}">
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#aa6e673be0c77990ac5b9e5a182fcb6e5"> 311</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_client_udp.html#aa6e673be0c77990ac5b9e5a182fcb6e5">Send</a>(std::string_view str)</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> {</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <a class="code hl_function" href="classdl_1_1_client_udp.html#a46d0906e5e9a739dfec4027ae596c4ef">Send</a>(<a class="code hl_function" href="namespacedl.html#af4c74bce1ba7b07a5aee7bc403f0ea25">CreateBufferView</a>(str));</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
<div class="foldopen" id="foldopen00316" data-start="{" data-end="}">
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#a584b8bafe6a59b61e30d3624308c5356"> 316</a></span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a>* <a class="code hl_function" href="classdl_1_1_client_udp.html#a584b8bafe6a59b61e30d3624308c5356">GetPopMsg</a>()</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> {</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span> (_bufListRecv.PopFront(_bufTemp))</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">return</span> &amp;_bufTemp;</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#a94353a4dbdee55425863697608e59ec6"> 324</a></span> <a class="code hl_function" href="classdl_1_1_client_udp.html#a94353a4dbdee55425863697608e59ec6">ClientUdp</a>();</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"><a class="line" href="classdl_1_1_client_udp.html#a83a60d6ab7e7fac334dab789561a4b5c"> 325</a></span> <a class="code hl_function" href="classdl_1_1_client_udp.html#a83a60d6ab7e7fac334dab789561a4b5c">~ClientUdp</a>();</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> ClientUdpImp* _imp;</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> std::atomic_bool _bValid;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> std::atomic_bool _bEnd;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _tSend;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _tRecv;</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <a class="code hl_typedef" href="namespacedl.html#ab13de2fc885706c4479dfceb8b687418">BufferList</a> _bufListSend;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <a class="code hl_typedef" href="namespacedl.html#ab13de2fc885706c4479dfceb8b687418">BufferList</a> _bufListRecv;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> _bufTemp;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_send(<span class="keywordtype">void</span>*);</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_recv(<span class="keywordtype">void</span>*);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">bool</span> _check_valid()</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> {</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span> (_bValid)</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <a class="code hl_define" href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a>(<span class="stringliteral">&quot;未调用 SetAddress,或无网络权限,后续调用无效!&quot;</span>);</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> }</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span>};</div>
</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="keyword">class </span>ServerUdpImp;</div>
<div class="foldopen" id="foldopen00350" data-start="{" data-end="};">
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html"> 350</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_server_udp.html#ad8fad41ab9c0fed4db3a834153a410d9">ServerUdp</a></div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span>{</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#a4b8f089c7f0558115a6acb3ee1addb43"> 352</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_friend" href="classdl_1_1_server_udp.html#a4b8f089c7f0558115a6acb3ee1addb43">ServerUdpImp</a>;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#a041eab9d2e0f53a3e8e065bbcf681205"> 354</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_server_udp.html#a041eab9d2e0f53a3e8e065bbcf681205">Start</a>(std::string_view ip, uint16_t port);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
<div class="foldopen" id="foldopen00356" data-start="{" data-end="}">
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#ae321dd4ab48b6c5e5f22154e80206b7a"> 356</a></span> <a class="code hl_struct" href="structdl_1_1_udp_message.html">UdpMessage</a>* <a class="code hl_function" href="classdl_1_1_server_udp.html#ae321dd4ab48b6c5e5f22154e80206b7a">GetPopMsg</a>() </div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> { </div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span> (_listMsg.PopFront(_msgTemp))</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">return</span> &amp;_msgTemp;</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> }</div>
</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#ad914d2d1d7003a6014ff7a0593788c58"> 364</a></span> std::string <a class="code hl_function" href="classdl_1_1_server_udp.html#ad914d2d1d7003a6014ff7a0593788c58">GetIp</a>();</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#ab3d2c6638535ef569ffda8ddaf7feb26"> 365</a></span> uint16_t <a class="code hl_function" href="classdl_1_1_server_udp.html#ab3d2c6638535ef569ffda8ddaf7feb26">GetPort</a>();</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#ad8fad41ab9c0fed4db3a834153a410d9"> 367</a></span> <a class="code hl_function" href="classdl_1_1_server_udp.html#ad8fad41ab9c0fed4db3a834153a410d9">ServerUdp</a>();</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"><a class="line" href="classdl_1_1_server_udp.html#ae4e759640e8ac2902e129dc1612f87cb"> 368</a></span> <a class="code hl_function" href="classdl_1_1_server_udp.html#ae4e759640e8ac2902e129dc1612f87cb">~ServerUdp</a>();</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <a class="code hl_friend" href="classdl_1_1_server_udp.html#a4b8f089c7f0558115a6acb3ee1addb43">ServerUdpImp</a>* _imp;</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <a class="code hl_class" href="classdl_1_1_thread.html">Thread</a>* _t; </div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <a class="code hl_typedef" href="namespacedl.html#a6803cf9f8b270323f2f2d20ece6e13fc">UdpMessageList</a> _listMsg;</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <a class="code hl_struct" href="structdl_1_1_udp_message.html">UdpMessage</a> _msgTemp;</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <span class="keyword">static</span> <span class="keywordtype">void</span> _thread_run(<span class="keywordtype">void</span>*);</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span>};</div>
</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span></div>
<div class="foldopen" id="foldopen00378" data-start="{" data-end="};">
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html"> 378</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_network.html#ad13a5621817dc27f3303f5d100cde814">Network</a></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span>{</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00381" data-start="{" data-end="}">
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html#ad13a5621817dc27f3303f5d100cde814"> 381</a></span> <a class="code hl_function" href="classdl_1_1_network.html#ad13a5621817dc27f3303f5d100cde814">Network</a>()</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> {</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="comment">//Debug();</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> }</div>
</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html#af723034f854f19749417542449c02efd"> 388</a></span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classdl_1_1_network.html#af723034f854f19749417542449c02efd">GetHostName</a>();</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html#a9d1a6968ca0a7b57ab01a06044f4c8ea"> 393</a></span> <span class="keyword">static</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classdl_1_1_network.html#a9d1a6968ca0a7b57ab01a06044f4c8ea">GetIpAddressLocal</a>(<span class="keywordtype">bool</span> ipv4 = <span class="keyword">true</span>);</div>
<div class="foldopen" id="foldopen00397" data-start="{" data-end="}">
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html#a58177c2ed9f13eb48c319891c67055d9"> 397</a></span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classdl_1_1_network.html#a58177c2ed9f13eb48c319891c67055d9">GetIpAddressLocalFirst</a>(<span class="keywordtype">bool</span> ipv4 = <span class="keyword">true</span>)</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> {</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> std::vector&lt;std::string&gt; vec = <a class="code hl_function" href="classdl_1_1_network.html#a9d1a6968ca0a7b57ab01a06044f4c8ea">GetIpAddressLocal</a>(ipv4);</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">return</span> vec.empty() ? <span class="stringliteral">&quot;127.0.0.1&quot;</span> : vec[0];</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> }</div>
</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
<div class="foldopen" id="foldopen00403" data-start="{" data-end="}">
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="classdl_1_1_network.html#a98775b9aed47b44926d83014caff7d3a"> 403</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_network.html#a98775b9aed47b44926d83014caff7d3a">Debug</a>()</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> {</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <a class="code hl_define" href="dl__log_8h.html#a156fd6dffd62306e07b5b77739680688">log_msg</a>(<span class="stringliteral">&quot;----------------网络信息-------------\n&quot;</span></div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="stringliteral">&quot;主机名:{}\n&quot;</span></div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="stringliteral">&quot;本地ip{}\n&quot;</span>,</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <a class="code hl_function" href="classdl_1_1_network.html#af723034f854f19749417542449c02efd">GetHostName</a>(),</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> String::Splicing(<a class="code hl_function" href="classdl_1_1_network.html#a9d1a6968ca0a7b57ab01a06044f4c8ea">GetIpAddressLocal</a>()));</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> }</div>
</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span>};</div>
</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> </div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="keyword">extern</span> Network* <a class="code hl_variable" href="namespacedl.html#a3b99a9aff9e1981bf6bb9af1d8013138">g_net</a>;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span>}</div>
<div class="ttc" id="aclassdl_1_1_buffer_html"><div class="ttname"><a href="classdl_1_1_buffer.html">dl::Buffer</a></div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00028">dl_buffer.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_html_a03d432457c957dc01a3f414be21e0c0e"><div class="ttname"><a href="classdl_1_1_buffer.html#a03d432457c957dc01a3f414be21e0c0e">dl::Buffer::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00034">dl_buffer.h:34</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_view_html"><div class="ttname"><a href="classdl_1_1_buffer_view.html">dl::BufferView</a></div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00155">dl_buffer.h:156</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_view_html_a1713eb619dfa95a8c0a4b6516cc6bde6"><div class="ttname"><a href="classdl_1_1_buffer_view.html#a1713eb619dfa95a8c0a4b6516cc6bde6">dl::BufferView::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00161">dl_buffer.h:161</a></div></div>
<div class="ttc" id="aclassdl_1_1_client_html_a366c9bdfcf64732cfed3360e5239c1f1"><div class="ttname"><a href="classdl_1_1_client.html#a366c9bdfcf64732cfed3360e5239c1f1">dl::Client::GetPopMsg</a></div><div class="ttdeci">TcpMessage * GetPopMsg()</div><div class="ttdef"><b>定义</b> <a href="#l00128">dl_net.h:128</a></div></div>
<div class="ttc" id="aclassdl_1_1_client_html_a5f64918ddde2005d5b31749310d92de5"><div class="ttname"><a href="classdl_1_1_client.html#a5f64918ddde2005d5b31749310d92de5">dl::Client::~Client</a></div><div class="ttdeci">~Client()</div></div>
<div class="ttc" id="aclassdl_1_1_client_html_a68059b7d56a631a5a6b7dea046dc0351"><div class="ttname"><a href="classdl_1_1_client.html#a68059b7d56a631a5a6b7dea046dc0351">dl::Client::Send</a></div><div class="ttdeci">void Send(E msg_id, const T &amp;a)</div><div class="ttdef"><b>定义</b> <a href="#l00109">dl_net.h:109</a></div></div>
<div class="ttc" id="aclassdl_1_1_client_html_acc08dbb74c6c0b3f35c177d18c032c89"><div class="ttname"><a href="classdl_1_1_client.html#acc08dbb74c6c0b3f35c177d18c032c89">dl::Client::Client</a></div><div class="ttdeci">Client()</div></div>
<div class="ttc" id="aclassdl_1_1_client_html_ae7bb057346b78deef5e8b8e27925027f"><div class="ttname"><a href="classdl_1_1_client.html#ae7bb057346b78deef5e8b8e27925027f">dl::Client::GetRemoteAddressString</a></div><div class="ttdeci">std::string GetRemoteAddressString()</div><div class="ttdoc">返回例如 192.168.1.1:7300</div></div>
<div class="ttc" id="aclassdl_1_1_client_html_afd660ffdaa68934886e9e685616df095"><div class="ttname"><a href="classdl_1_1_client.html#afd660ffdaa68934886e9e685616df095">dl::Client::Connent</a></div><div class="ttdeci">bool Connent(std::string_view ip, uint16_t port)</div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_a46d0906e5e9a739dfec4027ae596c4ef"><div class="ttname"><a href="classdl_1_1_client_udp.html#a46d0906e5e9a739dfec4027ae596c4ef">dl::ClientUdp::Send</a></div><div class="ttdeci">void Send(BufferView buf)</div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_a584b8bafe6a59b61e30d3624308c5356"><div class="ttname"><a href="classdl_1_1_client_udp.html#a584b8bafe6a59b61e30d3624308c5356">dl::ClientUdp::GetPopMsg</a></div><div class="ttdeci">Buffer * GetPopMsg()</div><div class="ttdef"><b>定义</b> <a href="#l00316">dl_net.h:316</a></div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_a83a60d6ab7e7fac334dab789561a4b5c"><div class="ttname"><a href="classdl_1_1_client_udp.html#a83a60d6ab7e7fac334dab789561a4b5c">dl::ClientUdp::~ClientUdp</a></div><div class="ttdeci">~ClientUdp()</div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_a94353a4dbdee55425863697608e59ec6"><div class="ttname"><a href="classdl_1_1_client_udp.html#a94353a4dbdee55425863697608e59ec6">dl::ClientUdp::ClientUdp</a></div><div class="ttdeci">ClientUdp()</div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_aa6e673be0c77990ac5b9e5a182fcb6e5"><div class="ttname"><a href="classdl_1_1_client_udp.html#aa6e673be0c77990ac5b9e5a182fcb6e5">dl::ClientUdp::Send</a></div><div class="ttdeci">void Send(std::string_view str)</div><div class="ttdef"><b>定义</b> <a href="#l00311">dl_net.h:311</a></div></div>
<div class="ttc" id="aclassdl_1_1_client_udp_html_af6a2a2d63c5faaa60b00cb6d980d98d4"><div class="ttname"><a href="classdl_1_1_client_udp.html#af6a2a2d63c5faaa60b00cb6d980d98d4">dl::ClientUdp::SetAddress</a></div><div class="ttdeci">void SetAddress(std::string_view ip, uint16_t port, bool broadcast=false)</div></div>
<div class="ttc" id="aclassdl_1_1_list_multi_thread_html"><div class="ttname"><a href="classdl_1_1_list_multi_thread.html">dl::ListMultiThread</a></div><div class="ttdoc">多线程队列</div><div class="ttdef"><b>定义</b> <a href="dl__list__mt_8h_source.html#l00022">dl_list_mt.h:23</a></div></div>
<div class="ttc" id="aclassdl_1_1_list_multi_thread_html_a2dc53318ebb2b89b3d4b4a5b5399a077"><div class="ttname"><a href="classdl_1_1_list_multi_thread.html#a2dc53318ebb2b89b3d4b4a5b5399a077">dl::ListMultiThread::PopFront</a></div><div class="ttdeci">bool PopFront(T &amp;a)</div><div class="ttdoc">取第一个,顺序通过 SetQueueMode 指定,默认FIFO</div><div class="ttdef"><b>定义</b> <a href="dl__list__mt_8h_source.html#l00029">dl_list_mt.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_network_html_a58177c2ed9f13eb48c319891c67055d9"><div class="ttname"><a href="classdl_1_1_network.html#a58177c2ed9f13eb48c319891c67055d9">dl::Network::GetIpAddressLocalFirst</a></div><div class="ttdeci">static std::string GetIpAddressLocalFirst(bool ipv4=true)</div><div class="ttdoc">返回第一个本地ip,失败返回127.0.0.1</div><div class="ttdef"><b>定义</b> <a href="#l00397">dl_net.h:397</a></div></div>
<div class="ttc" id="aclassdl_1_1_network_html_a98775b9aed47b44926d83014caff7d3a"><div class="ttname"><a href="classdl_1_1_network.html#a98775b9aed47b44926d83014caff7d3a">dl::Network::Debug</a></div><div class="ttdeci">void Debug()</div><div class="ttdef"><b>定义</b> <a href="#l00403">dl_net.h:403</a></div></div>
<div class="ttc" id="aclassdl_1_1_network_html_a9d1a6968ca0a7b57ab01a06044f4c8ea"><div class="ttname"><a href="classdl_1_1_network.html#a9d1a6968ca0a7b57ab01a06044f4c8ea">dl::Network::GetIpAddressLocal</a></div><div class="ttdeci">static std::vector&lt; std::string &gt; GetIpAddressLocal(bool ipv4=true)</div><div class="ttdoc">返回本地ip</div></div>
<div class="ttc" id="aclassdl_1_1_network_html_ad13a5621817dc27f3303f5d100cde814"><div class="ttname"><a href="classdl_1_1_network.html#ad13a5621817dc27f3303f5d100cde814">dl::Network::Network</a></div><div class="ttdeci">Network()</div><div class="ttdef"><b>定义</b> <a href="#l00381">dl_net.h:381</a></div></div>
<div class="ttc" id="aclassdl_1_1_network_html_af723034f854f19749417542449c02efd"><div class="ttname"><a href="classdl_1_1_network.html#af723034f854f19749417542449c02efd">dl::Network::GetHostName</a></div><div class="ttdeci">static std::string GetHostName()</div><div class="ttdoc">返回主机名</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a100618b662e3a352a7cf63db29158950"><div class="ttname"><a href="classdl_1_1_server.html#a100618b662e3a352a7cf63db29158950">dl::Server::GetRemoteAddressString</a></div><div class="ttdeci">std::string GetRemoteAddressString(int socket_id)</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a33caeb7456ac8649ebf09d1d5e202d9a"><div class="ttname"><a href="classdl_1_1_server.html#a33caeb7456ac8649ebf09d1d5e202d9a">dl::Server::Run</a></div><div class="ttdeci">void Run()</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a363b939f2004866cc61d6f8641b64b53"><div class="ttname"><a href="classdl_1_1_server.html#a363b939f2004866cc61d6f8641b64b53">dl::Server::GetIp</a></div><div class="ttdeci">std::string GetIp()</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a442d952037057f72e5bede777475e491"><div class="ttname"><a href="classdl_1_1_server.html#a442d952037057f72e5bede777475e491">dl::Server::GetPort</a></div><div class="ttdeci">uint16_t GetPort()</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a572a4908be95e5d78ec0d0cfb5bdd168"><div class="ttname"><a href="classdl_1_1_server.html#a572a4908be95e5d78ec0d0cfb5bdd168">dl::Server::CbDisconnect</a></div><div class="ttdeci">std::function&lt; void(int)&gt; CbDisconnect</div><div class="ttdoc">断线回调</div><div class="ttdef"><b>定义</b> <a href="#l00207">dl_net.h:207</a></div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a61802a86c9e05dfce3526b83e1030b62"><div class="ttname"><a href="classdl_1_1_server.html#a61802a86c9e05dfce3526b83e1030b62">dl::Server::Send</a></div><div class="ttdeci">void Send(int sokect_id, E msg_id, const T &amp;a)</div><div class="ttdef"><b>定义</b> <a href="#l00217">dl_net.h:217</a></div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a994ecaed74e2839873b615c13916b242"><div class="ttname"><a href="classdl_1_1_server.html#a994ecaed74e2839873b615c13916b242">dl::Server::Accept</a></div><div class="ttdeci">bool Accept(uint16_t port)</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_a9e41bbdda64c34a34d08986291272ee6"><div class="ttname"><a href="classdl_1_1_server.html#a9e41bbdda64c34a34d08986291272ee6">dl::Server::GetPopMsg</a></div><div class="ttdeci">TcpMessageServer * GetPopMsg()</div><div class="ttdef"><b>定义</b> <a href="#l00258">dl_net.h:258</a></div></div>
<div class="ttc" id="aclassdl_1_1_server_html_add34e05251e585f0a2c66c81cdd7451c"><div class="ttname"><a href="classdl_1_1_server.html#add34e05251e585f0a2c66c81cdd7451c">dl::Server::~Server</a></div><div class="ttdeci">~Server()</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_af909de52c5d28ab7c5aa196302ba7f99"><div class="ttname"><a href="classdl_1_1_server.html#af909de52c5d28ab7c5aa196302ba7f99">dl::Server::Server</a></div><div class="ttdeci">Server()</div></div>
<div class="ttc" id="aclassdl_1_1_server_html_afa6aa6578a2a292d8c33a31c5b8521f1"><div class="ttname"><a href="classdl_1_1_server.html#afa6aa6578a2a292d8c33a31c5b8521f1">dl::Server::SetCbDisconnect</a></div><div class="ttdeci">void SetCbDisconnect(CbDisconnect func)</div><div class="ttdoc">设置断线回调</div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_a041eab9d2e0f53a3e8e065bbcf681205"><div class="ttname"><a href="classdl_1_1_server_udp.html#a041eab9d2e0f53a3e8e065bbcf681205">dl::ServerUdp::Start</a></div><div class="ttdeci">bool Start(std::string_view ip, uint16_t port)</div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_a4b8f089c7f0558115a6acb3ee1addb43"><div class="ttname"><a href="classdl_1_1_server_udp.html#a4b8f089c7f0558115a6acb3ee1addb43">dl::ServerUdp::ServerUdpImp</a></div><div class="ttdeci">friend class ServerUdpImp</div><div class="ttdef"><b>定义</b> <a href="#l00352">dl_net.h:352</a></div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_ab3d2c6638535ef569ffda8ddaf7feb26"><div class="ttname"><a href="classdl_1_1_server_udp.html#ab3d2c6638535ef569ffda8ddaf7feb26">dl::ServerUdp::GetPort</a></div><div class="ttdeci">uint16_t GetPort()</div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_ad8fad41ab9c0fed4db3a834153a410d9"><div class="ttname"><a href="classdl_1_1_server_udp.html#ad8fad41ab9c0fed4db3a834153a410d9">dl::ServerUdp::ServerUdp</a></div><div class="ttdeci">ServerUdp()</div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_ad914d2d1d7003a6014ff7a0593788c58"><div class="ttname"><a href="classdl_1_1_server_udp.html#ad914d2d1d7003a6014ff7a0593788c58">dl::ServerUdp::GetIp</a></div><div class="ttdeci">std::string GetIp()</div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_ae321dd4ab48b6c5e5f22154e80206b7a"><div class="ttname"><a href="classdl_1_1_server_udp.html#ae321dd4ab48b6c5e5f22154e80206b7a">dl::ServerUdp::GetPopMsg</a></div><div class="ttdeci">UdpMessage * GetPopMsg()</div><div class="ttdef"><b>定义</b> <a href="#l00356">dl_net.h:356</a></div></div>
<div class="ttc" id="aclassdl_1_1_server_udp_html_ae4e759640e8ac2902e129dc1612f87cb"><div class="ttname"><a href="classdl_1_1_server_udp.html#ae4e759640e8ac2902e129dc1612f87cb">dl::ServerUdp::~ServerUdp</a></div><div class="ttdeci">~ServerUdp()</div></div>
<div class="ttc" id="aclassdl_1_1_thread_html"><div class="ttname"><a href="classdl_1_1_thread.html">dl::Thread</a></div><div class="ttdoc">线程</div><div class="ttdef"><b>定义</b> <a href="dl__thread_8h_source.html#l00029">dl_thread.h:30</a></div></div>
<div class="ttc" id="adl__list__mt_8h_html"><div class="ttname"><a href="dl__list__mt_8h.html">dl_list_mt.h</a></div><div class="ttdoc">多线程队列</div></div>
<div class="ttc" id="adl__log_8h_html"><div class="ttname"><a href="dl__log_8h.html">dl_log.h</a></div><div class="ttdoc">日志系统</div></div>
<div class="ttc" id="adl__log_8h_html_a04af09851c431d178f16b24fa1aac1e9"><div class="ttname"><a href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a></div><div class="ttdeci">#define log_warn(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00283">dl_log.h:283</a></div></div>
<div class="ttc" id="adl__log_8h_html_a156fd6dffd62306e07b5b77739680688"><div class="ttname"><a href="dl__log_8h.html#a156fd6dffd62306e07b5b77739680688">log_msg</a></div><div class="ttdeci">#define log_msg(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00281">dl_log.h:281</a></div></div>
<div class="ttc" id="adl__log_8h_html_aa1cfe5444875c8eca0ea6f6993977d6d"><div class="ttname"><a href="dl__log_8h.html#aa1cfe5444875c8eca0ea6f6993977d6d">log_info</a></div><div class="ttdeci">#define log_info(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00280">dl_log.h:280</a></div></div>
<div class="ttc" id="adl__string_8h_html"><div class="ttname"><a href="dl__string_8h.html">dl_string.h</a></div><div class="ttdoc">字符串相关</div></div>
<div class="ttc" id="adl__thread_8h_html"><div class="ttname"><a href="dl__thread_8h.html">dl_thread.h</a></div><div class="ttdoc">线程封装</div></div>
<div class="ttc" id="anamespacedl_html"><div class="ttname"><a href="namespacedl.html">dl</a></div><div class="ttdef"><b>定义</b> <a href="dl__array_8h_source.html#l00021">dl_array.h:22</a></div></div>
<div class="ttc" id="anamespacedl_html_a2db41536860e9b74589076e004e5d804"><div class="ttname"><a href="namespacedl.html#a2db41536860e9b74589076e004e5d804">dl::NETWORK_LOG_CLIENT</a></div><div class="ttdeci">constexpr bool NETWORK_LOG_CLIENT</div><div class="ttdef"><b>定义</b> <a href="#l00025">dl_net.h:25</a></div></div>
<div class="ttc" id="anamespacedl_html_a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da"><div class="ttname"><a href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a3a3ea00cfc35332cedf6e5e9a32e94da">dl::KeyCode::E</a></div><div class="ttdeci">@ E</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00106">dl_input.h:106</a></div></div>
<div class="ttc" id="anamespacedl_html_a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3"><div class="ttname"><a href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">dl::KeyCode::T</a></div><div class="ttdeci">@ T</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00121">dl_input.h:121</a></div></div>
<div class="ttc" id="anamespacedl_html_a3b99a9aff9e1981bf6bb9af1d8013138"><div class="ttname"><a href="namespacedl.html#a3b99a9aff9e1981bf6bb9af1d8013138">dl::g_net</a></div><div class="ttdeci">Network * g_net</div></div>
<div class="ttc" id="anamespacedl_html_a516228c6e606de7787651c408b475037"><div class="ttname"><a href="namespacedl.html#a516228c6e606de7787651c408b475037">dl::NETWORK_LOG_SERVER_UDP</a></div><div class="ttdeci">constexpr bool NETWORK_LOG_SERVER_UDP</div><div class="ttdef"><b>定义</b> <a href="#l00028">dl_net.h:28</a></div></div>
<div class="ttc" id="anamespacedl_html_a552ca554240a773aceefb009625e246c"><div class="ttname"><a href="namespacedl.html#a552ca554240a773aceefb009625e246c">dl::NETWORK_LOG_LOW</a></div><div class="ttdeci">constexpr bool NETWORK_LOG_LOW</div><div class="ttdef"><b>定义</b> <a href="#l00031">dl_net.h:31</a></div></div>
<div class="ttc" id="anamespacedl_html_a6803cf9f8b270323f2f2d20ece6e13fc"><div class="ttname"><a href="namespacedl.html#a6803cf9f8b270323f2f2d20ece6e13fc">dl::UdpMessageList</a></div><div class="ttdeci">ListMultiThread&lt; UdpMessage &gt; UdpMessageList</div><div class="ttdef"><b>定义</b> <a href="#l00098">dl_net.h:98</a></div></div>
<div class="ttc" id="anamespacedl_html_a84fe10fd60bc70214e049ed2c22b8cf6"><div class="ttname"><a href="namespacedl.html#a84fe10fd60bc70214e049ed2c22b8cf6">dl::TcpMessageList</a></div><div class="ttdeci">ListMultiThread&lt; TcpMessage &gt; TcpMessageList</div><div class="ttdef"><b>定义</b> <a href="#l00099">dl_net.h:99</a></div></div>
<div class="ttc" id="anamespacedl_html_aabddf788aef6db706892fec8787d5f54"><div class="ttname"><a href="namespacedl.html#aabddf788aef6db706892fec8787d5f54">dl::to_string_auto</a></div><div class="ttdeci">std::string to_string_auto(BufferView buf, bool add_tag=false)</div><div class="ttdoc">buf转为字符串,若不为utf8则转为16进制</div></div>
<div class="ttc" id="anamespacedl_html_ab13de2fc885706c4479dfceb8b687418"><div class="ttname"><a href="namespacedl.html#ab13de2fc885706c4479dfceb8b687418">dl::BufferList</a></div><div class="ttdeci">ListMultiThread&lt; Buffer &gt; BufferList</div><div class="ttdef"><b>定义</b> <a href="#l00097">dl_net.h:97</a></div></div>
<div class="ttc" id="anamespacedl_html_ab3d71bb32d1125d625ae47d1bbff70a6"><div class="ttname"><a href="namespacedl.html#ab3d71bb32d1125d625ae47d1bbff70a6">dl::NETWORK_MESSAGE_TAG</a></div><div class="ttdeci">constexpr uint8_t NETWORK_MESSAGE_TAG</div><div class="ttdef"><b>定义</b> <a href="#l00024">dl_net.h:24</a></div></div>
<div class="ttc" id="anamespacedl_html_ab5f28d4a7219a7176de90d8227ca08ae"><div class="ttname"><a href="namespacedl.html#ab5f28d4a7219a7176de90d8227ca08ae">dl::NETWORK_LOG_CLIENT_UDP</a></div><div class="ttdeci">constexpr bool NETWORK_LOG_CLIENT_UDP</div><div class="ttdef"><b>定义</b> <a href="#l00027">dl_net.h:27</a></div></div>
<div class="ttc" id="anamespacedl_html_ac76a0d66a826009277849be76d2a01b4"><div class="ttname"><a href="namespacedl.html#ac76a0d66a826009277849be76d2a01b4">dl::NETWORK_LOG_SERVER</a></div><div class="ttdeci">constexpr bool NETWORK_LOG_SERVER</div><div class="ttdef"><b>定义</b> <a href="#l00026">dl_net.h:26</a></div></div>
<div class="ttc" id="anamespacedl_html_af4c74bce1ba7b07a5aee7bc403f0ea25"><div class="ttname"><a href="namespacedl.html#af4c74bce1ba7b07a5aee7bc403f0ea25">dl::CreateBufferView</a></div><div class="ttdeci">BufferView CreateBufferView(const Buffer &amp;buf)</div><div class="ttdoc">创建buffer视图(右值不能默认转换)</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00201">dl_buffer.h:201</a></div></div>
<div class="ttc" id="astructdl_1_1_message_type_html"><div class="ttname"><a href="structdl_1_1_message_type.html">dl::MessageType</a></div><div class="ttdef"><b>定义</b> <a href="#l00037">dl_net.h:38</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html"><div class="ttname"><a href="structdl_1_1_msg_head.html">dl::MsgHead</a></div><div class="ttdoc">网络消息头</div><div class="ttdef"><b>定义</b> <a href="#l00043">dl_net.h:44</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_a1ccb9f07cda2eee615fe9d96f743bb8b"><div class="ttname"><a href="structdl_1_1_msg_head.html#a1ccb9f07cda2eee615fe9d96f743bb8b">dl::MsgHead::_magic</a></div><div class="ttdeci">uint8_t _magic</div><div class="ttdoc">魔法数字</div><div class="ttdef"><b>定义</b> <a href="#l00049">dl_net.h:49</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_a6115e5168538daf581da8380f8e01cec"><div class="ttname"><a href="structdl_1_1_msg_head.html#a6115e5168538daf581da8380f8e01cec">dl::MsgHead::_size</a></div><div class="ttdeci">uint32_t _size</div><div class="ttdoc">数据大小</div><div class="ttdef"><b>定义</b> <a href="#l00046">dl_net.h:46</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_a728b8cecedc8e6db4961fc23e8ee32bb"><div class="ttname"><a href="structdl_1_1_msg_head.html#a728b8cecedc8e6db4961fc23e8ee32bb">dl::MsgHead::_compress</a></div><div class="ttdeci">uint8_t _compress</div><div class="ttdoc">压缩标记</div><div class="ttdef"><b>定义</b> <a href="#l00048">dl_net.h:48</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_ac8fcf3ed85b8d943cc0bdbb70f014fee"><div class="ttname"><a href="structdl_1_1_msg_head.html#ac8fcf3ed85b8d943cc0bdbb70f014fee">dl::MsgHead::_pad</a></div><div class="ttdeci">uint8_t _pad</div><div class="ttdef"><b>定义</b> <a href="#l00050">dl_net.h:50</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_ad7f4de649c6b9de472b98998cf7bb6a5"><div class="ttname"><a href="structdl_1_1_msg_head.html#ad7f4de649c6b9de472b98998cf7bb6a5">dl::MsgHead::_check</a></div><div class="ttdeci">uint32_t _check</div><div class="ttdoc">校验</div><div class="ttdef"><b>定义</b> <a href="#l00047">dl_net.h:47</a></div></div>
<div class="ttc" id="astructdl_1_1_msg_head_html_adde37ed67d03cb5e9fbf77713d6a150b"><div class="ttname"><a href="structdl_1_1_msg_head.html#adde37ed67d03cb5e9fbf77713d6a150b">dl::MsgHead::_id</a></div><div class="ttdeci">uint32_t _id</div><div class="ttdoc">协议号</div><div class="ttdef"><b>定义</b> <a href="#l00045">dl_net.h:45</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_html"><div class="ttname"><a href="structdl_1_1_tcp_message.html">dl::TcpMessage</a></div><div class="ttdoc">tcp消息</div><div class="ttdef"><b>定义</b> <a href="#l00060">dl_net.h:61</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_html_a11bd50d8f5e79a59f67f7c61db7dcd99"><div class="ttname"><a href="structdl_1_1_tcp_message.html#a11bd50d8f5e79a59f67f7c61db7dcd99">dl::TcpMessage::_head</a></div><div class="ttdeci">MsgHead _head</div><div class="ttdef"><b>定义</b> <a href="#l00062">dl_net.h:62</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_html_a245e92e68a95c8ce20c63571c30f7a10"><div class="ttname"><a href="structdl_1_1_tcp_message.html#a245e92e68a95c8ce20c63571c30f7a10">dl::TcpMessage::_buf</a></div><div class="ttdeci">Buffer _buf</div><div class="ttdef"><b>定义</b> <a href="#l00063">dl_net.h:63</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_html_ab3305383f6428d4b030847cc7a79f800"><div class="ttname"><a href="structdl_1_1_tcp_message.html#ab3305383f6428d4b030847cc7a79f800">dl::TcpMessage::GetMsgId</a></div><div class="ttdeci">E GetMsgId(uint32_t id)</div><div class="ttdef"><b>定义</b> <a href="#l00066">dl_net.h:66</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_server_html"><div class="ttname"><a href="structdl_1_1_tcp_message_server.html">dl::TcpMessageServer</a></div><div class="ttdef"><b>定义</b> <a href="#l00078">dl_net.h:79</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_server_html_a2b0e75f400b2c1f07c0f219a494b28f6"><div class="ttname"><a href="structdl_1_1_tcp_message_server.html#a2b0e75f400b2c1f07c0f219a494b28f6">dl::TcpMessageServer::_head</a></div><div class="ttdeci">MsgHead _head</div><div class="ttdef"><b>定义</b> <a href="#l00080">dl_net.h:80</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_server_html_a562b592a2cdd59a81547f930be692b53"><div class="ttname"><a href="structdl_1_1_tcp_message_server.html#a562b592a2cdd59a81547f930be692b53">dl::TcpMessageServer::GetMsgId</a></div><div class="ttdeci">E GetMsgId(uint32_t id)</div><div class="ttdef"><b>定义</b> <a href="#l00085">dl_net.h:85</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_server_html_af46b12991cc4f2731135aa683fe8a671"><div class="ttname"><a href="structdl_1_1_tcp_message_server.html#af46b12991cc4f2731135aa683fe8a671">dl::TcpMessageServer::_buf</a></div><div class="ttdeci">Buffer _buf</div><div class="ttdef"><b>定义</b> <a href="#l00081">dl_net.h:81</a></div></div>
<div class="ttc" id="astructdl_1_1_tcp_message_server_html_affb88b0538a52e3969e9dfeaac6d148f"><div class="ttname"><a href="structdl_1_1_tcp_message_server.html#affb88b0538a52e3969e9dfeaac6d148f">dl::TcpMessageServer::_socketId</a></div><div class="ttdeci">int _socketId</div><div class="ttdef"><b>定义</b> <a href="#l00082">dl_net.h:82</a></div></div>
<div class="ttc" id="astructdl_1_1_udp_message_html"><div class="ttname"><a href="structdl_1_1_udp_message.html">dl::UdpMessage</a></div><div class="ttdoc">upd消息</div><div class="ttdef"><b>定义</b> <a href="#l00053">dl_net.h:54</a></div></div>
<div class="ttc" id="astructdl_1_1_udp_message_html_a1667d2c1b7be685bb72e6018436ba502"><div class="ttname"><a href="structdl_1_1_udp_message.html#a1667d2c1b7be685bb72e6018436ba502">dl::UdpMessage::_buf</a></div><div class="ttdeci">Buffer _buf</div><div class="ttdef"><b>定义</b> <a href="#l00057">dl_net.h:57</a></div></div>
<div class="ttc" id="astructdl_1_1_udp_message_html_a801797e91b9237d8cac72d495d15f25c"><div class="ttname"><a href="structdl_1_1_udp_message.html#a801797e91b9237d8cac72d495d15f25c">dl::UdpMessage::_ip</a></div><div class="ttdeci">std::string _ip</div><div class="ttdef"><b>定义</b> <a href="#l00055">dl_net.h:55</a></div></div>
<div class="ttc" id="astructdl_1_1_udp_message_html_aa771dc19c8aff5e01405fa3fc2763dcd"><div class="ttname"><a href="structdl_1_1_udp_message.html#aa771dc19c8aff5e01405fa3fc2763dcd">dl::UdpMessage::_port</a></div><div class="ttdeci">uint16_t _port</div><div class="ttdef"><b>定义</b> <a href="#l00056">dl_net.h:56</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1
</small></address>
</div><!-- doc-content -->
</body>
</html>