📄 zigserver_8h-source.html
字号:
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->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->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->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> &client_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &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> &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> &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> &remote_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &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 & 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->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->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->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->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> &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->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> &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->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> &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->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> &msgbuf) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->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> &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->open_channel(client_id); <span class="keywordflow">return</span> 0; }00436
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -