⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zigserver_8h-source.html

📁 用来介绍ZIG Library游戏网络引擎的文档
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00144 00145         <span class="comment">//boolean flag: ziglet_thread should abort now.</span>00146         <span class="keyword">volatile</span> <span class="keywordtype">bool</span> quit_ziglet_thread;00147 00148         <span class="comment">//NEW ZIG v1.2.1: checking for pending "client ready" / "client preparing" callbacks when running in "nonblocking mode"</span>00149         <span class="keyword">volatile</span> <span class="keywordtype">bool</span> ziglet_callback_pending;00150 };00151 00153 <span class="comment">//the server. extending the server_behavior_i inteface for simplicity's sake</span><a name="l00154"></a><a class="code" href="classzigserver__c.html">00154</a> <span class="keyword">class </span><a class="code" href="classzigserver__c.html">zigserver_c</a> : <span class="keyword">public</span> server_behavior_i {00155 <span class="keyword">public</span>:00156 00158         <a class="code" href="classzigserver__c.html#a2">zigserver_c</a>(<a class="code" href="classconsole__c.html">console_c</a> *conio);00159 00161         <span class="keyword">virtual</span> <a class="code" href="classzigserver__c.html#a1">~zigserver_c</a>();00162 00166         <a class="code" href="classzigserver__c.html#a2">zigserver_c</a>();00167 00169         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a3">set_console</a>(<a class="code" href="classconsole__c.html">console_c</a> *conio);00170 00171         <span class="comment">// ----------------------------------------------------------------------------------------</span>00172         <span class="comment">//    BASIC CONFIGURATION AND START/STOP METHODS:</span>00173         <span class="comment">// ----------------------------------------------------------------------------------------</span>00174 <a name="l00179"></a><a class="code" href="classzigserver__c.html#a4">00179</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a4">set_server_tick</a>(<span class="keywordtype">double</span> tick = 0.1) { server_tick = tick; timing_vars_changed_event(); }00180 <a name="l00188"></a><a class="code" href="classzigserver__c.html#a5">00188</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a5">set_net_ratio</a>(<span class="keywordtype">int</span> ratio = 1) { net_ratio = ratio; timing_vars_changed_event(); }00189 <a name="l00192"></a><a class="code" href="classzigserver__c.html#a6">00192</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a6">set_shutdown_timeout</a>(<span class="keywordtype">int</span> timeout = 5) { shutdown_timeout = timeout; }00193 <a name="l00196"></a><a class="code" href="classzigserver__c.html#a7">00196</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a7">set_client_timeout</a>(<span class="keywordtype">int</span> timeout = 30) { 00197                 client_timeout = timeout; 00198                 <span class="keywordflow">if</span> (server) server-&gt;set_client_timeout(timeout);00199         }00200 <a name="l00204"></a><a class="code" href="classzigserver__c.html#a8">00204</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a8">set_default_send_message_policy</a>(<span class="keywordtype">int</span> send_policy) { 00205                 default_send_message_policy = send_policy; 00206                 <span class="keywordflow">if</span> (server) server-&gt;set_default_send_message_policy( send_policy );00207         }00208 <a name="l00210"></a><a class="code" href="classzigserver__c.html#a9">00210</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a9">set_timing_policy</a>(<span class="keywordtype">int</span> policy = <a class="code" href="zig_8h.html#a23a6">ZIGTIMING_SLEEP</a>) { timing_policy = policy; }00211 <a name="l00217"></a><a class="code" href="classzigserver__c.html#a10">00217</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a10">set_compression</a>(<span class="keywordtype">int</span> minimum_packet_size = -1) { server_compression_config = minimum_packet_size; <span class="keywordflow">if</span> (server) server-&gt;set_compression(server_compression_config); }00218 00229         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a11">run</a>(<span class="keywordtype">int</span> port, <span class="keywordtype">int</span> maxplayers, <span class="keywordtype">int</span> channel_port, <span class="keywordtype">int</span> threads_prio = <a class="code" href="zig_8h.html#a25a14">ZIGTHREADSPRIO_ALL_HIGH</a>, <span class="keywordtype">int</span> threading_strategy = <a class="code" href="zig_8h.html#a24a9">ZIG_SERVER_THREADING_1_N</a>);00230 00240         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a12">run_async</a>(<span class="keywordtype">int</span> port, <span class="keywordtype">int</span> maxplayers, <span class="keywordtype">int</span> channel_port, <span class="keywordtype">int</span> threads_prio = <a class="code" href="zig_8h.html#a25a14">ZIGTHREADSPRIO_ALL_HIGH</a>, <span class="keywordtype">int</span> threading_strategy = <a class="code" href="zig_8h.html#a24a9">ZIG_SERVER_THREADING_1_N</a>);00241 00255         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a13">run_nonblocking</a>(<span class="keywordtype">int</span> port, <span class="keywordtype">int</span> maxplayers, <span class="keywordtype">int</span> channel_port, <span class="keywordtype">int</span> threads_prio = <a class="code" href="zig_8h.html#a25a14">ZIGTHREADSPRIO_ALL_HIGH</a>);00256 00262         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a14">stop</a>();00263 00271   <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a15">process_nonblocking</a>();00272 00273         <span class="comment">// ----------------------------------------------------------------------------------------</span>00274         <span class="comment">//    METHODS THAT SHOULD BE OVERRIDEN: </span>00275         <span class="comment">// ----------------------------------------------------------------------------------------</span>00276 <a name="l00281"></a><a class="code" href="classzigserver__c.html#a16">00281</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a16">init</a>() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }00282 <a name="l00286"></a><a class="code" href="classzigserver__c.html#a17">00286</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a17">update_frame</a>() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }00287 <a name="l00293"></a><a class="code" href="classzigserver__c.html#a18">00293</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a18">broadcast_frame</a>() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }00294 <a name="l00300"></a><a class="code" href="classzigserver__c.html#a19">00300</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a19">render_frame</a>() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }00301 <a name="l00307"></a><a class="code" href="classzigserver__c.html#a20">00307</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a20">poll_input</a>() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }00308 <a name="l00311"></a><a class="code" href="classzigserver__c.html#a21">00311</a>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a21">finish</a>() { }00312 00318         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a22">accept_client</a>(<a class="code" href="classaddress__c.html">address_c</a> &amp;client_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;answer) = 0;00319 00323         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a23">client_connected</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;custom) = 0;00324 00328         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a24">client_disconnected</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> zig_reason) = 0;00329 00331         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a25">client_incoming_data</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;in, <span class="keywordtype">int</span> packet_id) = 0;00332 00334         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a26">client_ping_result</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> ping_value) = 0;00335 00341         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a27">get_server_info</a>(<a class="code" href="classaddress__c.html">address_c</a> &amp;remote_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;answer) = 0;00342 00344         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a28">channel_opened</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, <a class="code" href="classchannel__c.html">channel_c</a> *ch) = 0;00345 00347         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a29">channel_open_failed</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, <span class="keywordtype">int</span> failcode) = 0;00348 00351         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a30">client_ziglets_ready</a>(<span class="keywordtype">int</span> client_id) = 0;00352 00356         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a31">client_ziglets_preparing</a>(<span class="keywordtype">int</span> client_id) = 0;00357 00358         <span class="comment">// ----------------------------------------------------------------------------------------</span>00359         <span class="comment">//    METHODS THAT INTERACT WITH A GIVEN CLIENT (MESSAGING, PING &amp; DISCONNECTION):</span>00360         <span class="comment">// ----------------------------------------------------------------------------------------</span>00361 00364         <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a32">get_client_latency</a>(<span class="keywordtype">int</span> client_id);00365 <a name="l00367"></a><a class="code" href="classzigserver__c.html#a33">00367</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a33">disconnect_client</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> timeout) { <span class="keywordflow">if</span> (server) server-&gt;disconnect_client(client_id, timeout); }00368 <a name="l00371"></a><a class="code" href="classzigserver__c.html#a34">00371</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a33">disconnect_client</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> reason, <span class="keywordtype">int</span> timeout) { <span class="keywordflow">if</span> (server) server-&gt;disconnect_client(client_id, reason, timeout); }00372 <a name="l00374"></a><a class="code" href="classzigserver__c.html#a35">00374</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a33">disconnect_client</a>(<span class="keywordtype">int</span> client_id) { <span class="keywordflow">if</span> (server) server-&gt;disconnect_client(client_id); }00375 <a name="l00378"></a><a class="code" href="classzigserver__c.html#a36">00378</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a33">disconnect_client</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> reason) { <span class="keywordflow">if</span> (server) server-&gt;disconnect_client(client_id, reason); }00379 <a name="l00383"></a><a class="code" href="classzigserver__c.html#a37">00383</a>         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a37">send_message</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;message, <span class="keywordtype">int</span> policy = RSP_USE_DEFAULT) { <span class="keywordtype">bool</span> r = <span class="keyword">false</span>; <span class="keywordflow">if</span> (server) r = (server-&gt;send_message(client_id, message, policy) != 0); <span class="keywordflow">return</span> r; }00384 <a name="l00388"></a><a class="code" href="classzigserver__c.html#a38">00388</a>         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a38">broadcast_message</a>(<a class="code" href="classbuffer__c.html">buffer_c</a> &amp;message, <span class="keywordtype">int</span> policy = RSP_USE_DEFAULT) { <span class="keywordtype">bool</span> r = <span class="keyword">false</span>; <span class="keywordflow">if</span> (server) r = (server-&gt;broadcast_message(message, policy) != 0); <span class="keywordflow">return</span> r; }00389 00391         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a39">send_frame</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;framebuf, <span class="keywordtype">int</span> *packet_id = 0);00392 <a name="l00396"></a><a class="code" href="classzigserver__c.html#a40">00396</a>         <a class="code" href="classbuffer__c.html">buffer_c</a> <a class="code" href="classzigserver__c.html#a40">receive_message</a>(<span class="keywordtype">int</span> client_id) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server-&gt;receive_message(client_id); <a class="code" href="classbuffer__c.html">buffer_c</a> b; b.<a class="code" href="classbuffer__c.html#m0">code</a> = -1; <span class="keywordflow">return</span> b; }00397 <a name="l00401"></a><a class="code" href="classzigserver__c.html#a41">00401</a>         <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a40">receive_message</a>(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &amp;msgbuf) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server-&gt;receive_message(client_id, msgbuf); <span class="keywordflow">return</span> -1; }00402 00403         <span class="comment">// ----------------------------------------------------------------------------------------</span>00404         <span class="comment">//    METHODS TO HELP DEALING WITH OVER-LOADED SERVERS (CPU, NETWORK...):</span>00405         <span class="comment">// ----------------------------------------------------------------------------------------</span>00406 00410         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a42">panic_drop</a>();00411 00412         <span class="comment">// ----------------------------------------------------------------------------------------</span>00413         <span class="comment">//    RESOURCE FILE MANAGEMENT ("ZIGLETS")-RELATED METHODS:</span>00414         <span class="comment">// ----------------------------------------------------------------------------------------</span>00415 <a name="l00417"></a><a class="code" href="classzigserver__c.html#a43">00417</a>         <a class="code" href="classziglet__manager__c.html">ziglet_manager_c</a> *<a class="code" href="classzigserver__c.html#a43">get_ziglet_manager</a>() { <span class="keywordflow">return</span> &amp;ziglet_manager; }00418 00422         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a44">set_ziglet_status</a>(std::string name, <span class="keywordtype">int</span> status, std::string version = <span class="stringliteral">""</span>);00423 <a name="l00425"></a><a class="code" href="classzigserver__c.html#a45">00425</a>         <span class="keywordtype">void</span> <a class="code" href="classzigserver__c.html#a45">clear_all_ziglet_status</a>() { ziglet_selectors.clear(); }00426 00428         <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a46">is_client_ready</a>(<span class="keywordtype">int</span> client_id);00429 00430         <span class="comment">// ----------------------------------------------------------------------------------------</span>00431         <span class="comment">//    TCP CHANNELS-RELATED METHODS:</span>00432         <span class="comment">// ----------------------------------------------------------------------------------------</span>00433 <a name="l00435"></a><a class="code" href="classzigserver__c.html#a47">00435</a>         <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a47">open_channel</a>(<span class="keywordtype">int</span> client_id) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server-&gt;open_channel(client_id); <span class="keywordflow">return</span> 0; }00436 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -