📄 zigserver_8h-source.html
字号:
<a name="l00438"></a><a class="code" href="classzigserver__c.html#a48">00438</a> <span class="keywordtype">bool</span> <a class="code" href="classzigserver__c.html#a48">close_channel</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> (server->close_channel(client_id, channel_id) != 0); <span class="keywordflow">return</span> <span class="keyword">false</span>; }00439 <a name="l00441"></a><a class="code" href="classzigserver__c.html#a49">00441</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00442 <a name="l00444"></a><a class="code" href="classzigserver__c.html#a50">00444</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLubyte out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00445 <a name="l00447"></a><a class="code" href="classzigserver__c.html#a51">00447</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLbyte out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00448 <a name="l00450"></a><a class="code" href="classzigserver__c.html#a52">00450</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLushort out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00451 <a name="l00453"></a><a class="code" href="classzigserver__c.html#a53">00453</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLshort out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00454 <a name="l00456"></a><a class="code" href="classzigserver__c.html#a54">00456</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLulong out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00457 <a name="l00459"></a><a class="code" href="classzigserver__c.html#a55">00459</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLlong out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00460 <a name="l00462"></a><a class="code" href="classzigserver__c.html#a56">00462</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLfloat out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00463 <a name="l00465"></a><a class="code" href="classzigserver__c.html#a57">00465</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, NLdouble out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00466 <a name="l00468"></a><a class="code" href="classzigserver__c.html#a58">00468</a> <span class="keywordtype">int</span> <a class="code" href="classzigserver__c.html#a49">chan_write</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, std::string out, <span class="keywordtype">bool</span> timeout_is_failure = <span class="keyword">true</span>, <span class="keywordtype">double</span> timeout = 3.0) { <span class="keywordflow">if</span> (server) <span class="keywordflow">return</span> server->chan_write(client_id, channel_id, out, timeout_is_failure, timeout); <span class="keywordflow">else</span> <span class="keywordflow">return</span> NL_INVALID; }00469 00470 <span class="comment">// ----------------------------------------------------------------------------------------</span>00471 <span class="comment">// below from this point are a lot of implementation details you shouldn't care</span>00472 <span class="comment">// about. do not call or override any of the following members...:</span>00473 <span class="comment">// ----------------------------------------------------------------------------------------</span>00474 00475 <span class="comment">//make a blocking UDP request to a connected client. see station_c::make_request() at station.h</span>00476 <a class="code" href="classbuffer__c.html">buffer_c</a> make_request(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &req, <span class="keywordtype">int</span> timeout_ms, <span class="keyword">volatile</span> <span class="keywordtype">bool</span> *cancel_flag, <span class="keywordtype">int</span> interval_ms = 200, <span class="keywordtype">int</span> send_ms = -1) { 00477 <span class="keywordflow">return</span> server->make_request(client_id, req, timeout_ms, cancel_flag, interval_ms); 00478 }00479 00480 <span class="comment">//leetserver calls to know if it accepts or denies a connection.</span>00481 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> leet_accept_client(NLaddress &client_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &answer);00482 00483 <span class="comment">//leetserver callback: a client has just been accepted by (connected to) the leetserver</span>00484 <span class="comment">// v1.3.4: "custom" is the same "custom" parameter that was passed to leet_accept_client()</span>00485 <span class="keyword">virtual</span> <span class="keywordtype">void</span> leet_client_connected(<span class="keywordtype">int</span> client_id, <a class="code" href="classbuffer__c.html">buffer_c</a> &custom);00486 00487 <span class="comment">//leetserver callback: a client has just disconnected or been disconnected by the leetserver</span>00488 <span class="keyword">virtual</span> <span class="keywordtype">void</span> leet_client_disconnected(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> code_reason);00489 00490 <span class="comment">//leetserver callback: incoming game packet from client</span>00491 <span class="keyword">virtual</span> <span class="keywordtype">void</span> leet_client_incoming_data(<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);00492 00493 <span class="comment">// leetserver callback: somebody wants to get some server information... (see server.h for details)</span>00494 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> leet_get_server_info(NLaddress &remote_addr, <a class="code" href="classbuffer__c.html">buffer_c</a> &custom, <a class="code" href="classbuffer__c.html">buffer_c</a> &answer);00495 00496 <span class="comment">// leetserver callback: a channel to a certain client has been opened.</span>00497 <span class="keyword">virtual</span> <span class="keywordtype">void</span> leet_channel_opened(<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);00498 00499 <span class="comment">// leetserver callback: a channel to a certain client could not be opened</span>00500 <span class="comment">// error: an error code.</span>00501 <span class="keyword">virtual</span> <span class="keywordtype">void</span> leet_channel_open_failed(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> channel_id, <span class="keywordtype">int</span> failcode);00502 00503 <span class="comment">//THREAD RUN: runs the server loop. this is called from run() and the async run thread</span>00504 <span class="keywordtype">bool</span> loop();00505 00506 <span class="comment">//THREAD RUN: run channel open asynchronously</span>00507 <span class="keywordtype">void</span> open_channel_async_thread_run(<span class="keywordtype">int</span> cl_id, <span class="keywordtype">int</span> ch_id, <span class="keywordtype">bool</span> ue);00508 00509 <span class="comment">//THREAD RUN: ziglet preparer: talks with a zigclient in order to check if it has all the</span>00510 <span class="comment">//required files before telling to it that it's "ready".</span>00511 <span class="keywordtype">void</span> *ziglet_preparer_thread_run(<span class="keywordtype">void</span> *arg);00512 00513 <span class="comment">//THREAD RUN: helper for ziglet_preparer_thread_run()</span>00514 <span class="keywordtype">bool</span> ziglet_preparer_upload_component(zig_remote_client_c *client, <a class="code" href="classziglet__c.html">ziglet_c</a> *ziglet, <a class="code" href="classziglet__component__c.html">ziglet_component_c</a> *file);00515 00516 <span class="keyword">protected</span>:00517 00518 <span class="comment">//thread run - change nettick blocking UDP request for a client (see "misc thread")</span>00519 <span class="keywordtype">void</span> *change_nettick_thread_run(<span class="keywordtype">void</span> *zig_remote_client_c_client);00520 00521 <span class="comment">//thread run - just call loop()</span>00522 <span class="keywordtype">void</span>* async_loop_thread_run(<span class="keywordtype">void</span> *dummy);00523 00524 <span class="comment">//(attempts to) start the server. returns false on error.</span>00525 <span class="keywordtype">bool</span> start(<span class="keywordtype">int</span> port, <span class="keywordtype">int</span> maxplayers, <span class="keywordtype">int</span> channel_port, <span class="keywordtype">int</span> threading_strategy, <span class="keywordtype">int</span> threads_prio);00526 00527 <span class="comment">//shuts down the server. this sends messages to clients, closes stuff... and then returns.</span>00528 <span class="comment">//returns false if server not started.</span>00529 <span class="keywordtype">bool</span> shutdown();00530 00531 <span class="comment">//common constructor code (helper)</span>00532 <span class="keywordtype">void</span> common_inits();00533 00534 <span class="comment">//find client</span>00535 zig_remote_client_c *get_client(<span class="keywordtype">int</span> client_id);00536 00537 <span class="comment">//a map for client_id --> some client state</span>00538 std::map<int, zig_remote_client_c*> clients;00539 00540 <span class="comment">//mutex for accessing the map</span>00541 mutex_c climutex;00542 00543 <span class="comment">//internal I/O console object</span>00544 <a class="code" href="classconsole__c.html">console_c</a> *con;00545 00546 <span class="comment">//shutdown timeout, client timeout</span>00547 <span class="keywordtype">int</span> shutdown_timeout;00548 <span class="keywordtype">int</span> client_timeout;00549 00550 <span class="comment">//thread for async server run</span>00551 <span class="comment">//NLthreadID thread_run;</span>00552 thread_c<zigserver_c> thread_run;00553 00554 <span class="comment">//patch</span>00555 <span class="keywordtype">int</span> conf_port, conf_maxplayers;00556 00557 <span class="comment">//stop called?</span>00558 <span class="keyword">volatile</span> <span class="keywordtype">bool</span> stop_called;00559 00560 <span class="comment">//running async ok? that is, the async thread is already running?</span>00561 <span class="keywordtype">bool</span> running_async;00562 00563 <span class="comment">//server net tick rate</span>00564 <span class="keywordtype">double</span> server_tick;00565 00566 <span class="comment">//server's updates-to-broadcasts net ratio</span>00567 <span class="keywordtype">int</span> net_ratio;00568 <span class="keywordtype">int</span> net_ratio_skipcount; <span class="comment">//current skip count, when ==0, send and set to net_ratio</span>00569 00570 <span class="comment">//ping request stuff</span>00571 <span class="keywordtype">int</span> implicit_ping_modulus;00572 00573 <span class="comment">//my ziglet manager</span>00574 <a class="code" href="classziglet__manager__c.html">ziglet_manager_c</a> ziglet_manager;00575 00576 <span class="comment">//ziglet selection info map. <ziglet-name(string) ---> ziglet selection info></span>00577 std::map<std::string, ziglet_selector_c> ziglet_selectors;00578 00579 <span class="comment">//mutex for accessing the ziglet selectors map</span>00580 mutex_c zigsel_mutex;00581 00582 <span class="comment">//boolean flag: setada para TRUE para avisar todas as threads que atualizam</span>00583 <span class="comment">//ziglets em clientes que o map foi modificado e precisa ser scaneado desde</span>00584 <span class="comment">//o in韈io.</span>00585 <span class="comment">//ESSA VAR s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -