📄 pstreams.h.html
字号:
<font CLASS=preproc>#ifdef</font> WIN32 <font CLASS=keyword>const</font> <font CLASS=keytype>int</font> DEF_PIPE_TIMEOUT <font CLASS=symbols>=</font> <font CLASS=integer>20000</font>; <font CLASS=comment>// in milliseconds, for reading and writing</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> DEF_PIPE_OPEN_TIMEOUT <font CLASS=symbols>=</font> <font CLASS=integer>1000</font>; <font CLASS=comment>// for connecting to the remote pipe:</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> DEF_PIPE_OPEN_RETRY <font CLASS=symbols>=</font> <font CLASS=integer>5</font>; <font CLASS=comment>// will double the timeout value for each retry,</font> <font CLASS=comment>// i.e. 1 second, then 2, then 4 etc.</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> DEF_PIPE_SYSTEM_BUF_SIZE <font CLASS=symbols>=</font> <font CLASS=integer>4096</font>;<font CLASS=preproc>#endif</font> <font CLASS=keyword>class</font> namedpipe: public fdxstm{ <font CLASS=keyword>friend</font> <font CLASS=keyword>class</font> npserver;<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> string pipename; <font CLASS=keytype>int</font> svhandle;<font CLASS=preproc>#ifdef</font> WIN32 // we use overlapped IO in order to have timed waiting in serve() // and also to implement timeout error on the client side OVERLAPPED ovr; <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawread(<font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawwrite(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); <font CLASS=keytype>static</font> string realpipename(<font CLASS=keyword>const</font> string& pipename, <font CLASS=keyword>const</font> string& svrname <font CLASS=symbols>=</font> nullstring); <font CLASS=keytype>void</font> initovr();<font CLASS=preproc>#else</font> <font CLASS=keytype>static</font> string realpipename(<font CLASS=keyword>const</font> string& pipename); <font CLASS=keytype>static</font> <font CLASS=keytype>bool</font> setupsockaddr(<font CLASS=keyword>const</font> string& pipename, <font CLASS=keytype>void</font>* sa); <font CLASS=keytype>void</font> initovr() {}<font CLASS=preproc>#endif</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doopen(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doclose(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> doseek(<font CLASS=keytype>int</font>, ioseekmode);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> namedpipe(); namedpipe(<font CLASS=keyword>const</font> string& ipipename);<font CLASS=preproc>#ifdef</font> WIN32 namedpipe(<font CLASS=keyword>const</font> string& ipipename, <font CLASS=keyword>const</font> string& servername);<font CLASS=preproc>#endif</font> <font CLASS=keyword>virtual</font> ~namedpipe(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> classid(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> flush(); <font CLASS=keyword>virtual</font> string get_streamname(); string get_pipename() { <font CLASS=keyword>return</font> pipename; } <font CLASS=keytype>void</font> set_pipename(<font CLASS=keyword>const</font> string&); <font CLASS=keytype>void</font> set_pipename(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*);};<font CLASS=keyword>class</font> npserver: public unknown{ string pipename; <font CLASS=keytype>int</font> handle; <font CLASS=keytype>bool</font> active; <font CLASS=keytype>void</font> error(<font CLASS=keytype>int</font> code, <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* defmsg); <font CLASS=keytype>void</font> open(); <font CLASS=keytype>void</font> close();<font CLASS=preproc>#ifdef</font> WIN32 <font CLASS=keytype>void</font> openinst(); <font CLASS=keytype>void</font> closeinst();<font CLASS=preproc>#endif</font> <font CLASS=preproc><font CLASS=keyword>public</font>:</font> npserver(<font CLASS=keyword>const</font> string& ipipename); ~npserver(); <font CLASS=keytype>bool</font> serve(namedpipe& client, <font CLASS=keytype>int</font> timeout <font CLASS=symbols>=</font> <font CLASS=symbols>-</font><font CLASS=integer>1</font>);};<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- utility streams ----------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>//</font><font CLASS=comment>// MD5 -- message digest algorithm</font><font CLASS=comment>// Derived from L. Peter Deutsch's work, please see src/pmd5.cxx</font><font CLASS=comment>//</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> md5_digsize <font CLASS=symbols>=</font> <font CLASS=integer>16</font>;<font CLASS=keyword>typedef</font> uchar md5_digest[md5_digsize];<font CLASS=comment>// from md5.h</font><font CLASS=keyword>typedef</font> <font CLASS=keytype>unsigned</font> <font CLASS=keytype>char</font> md5_byte_t; <font CLASS=comment>/* 8-bit byte */</font><font CLASS=keyword>typedef</font> <font CLASS=keytype>unsigned</font> <font CLASS=keytype>int</font> md5_word_t; <font CLASS=comment>/* 32-bit word */</font><font CLASS=keyword>typedef</font> <font CLASS=keyword>struct</font> md5_state_s{ md5_word_t count[<font CLASS=integer>2</font>]; <font CLASS=comment>/* message length in bits, lsw first */</font> md5_word_t abcd[<font CLASS=integer>4</font>]; <font CLASS=comment>/* digest buffer */</font> md5_byte_t buf[<font CLASS=integer>64</font>]; <font CLASS=comment>/* accumulate block */</font>} md5_state_t;<font CLASS=keyword>class</font> outmd5: public outfilter{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> md5_state_s ctx; md5_digest digest; <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doopen(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doclose(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawwrite(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> outmd5(outstm* istm <font CLASS=symbols>=</font> nil); <font CLASS=keyword>virtual</font> ~outmd5(); <font CLASS=keyword>virtual</font> string get_streamname(); <font CLASS=keyword>const</font> <font CLASS=keytype>unsigned</font> <font CLASS=keytype>char</font>* get_bindigest() { close(); <font CLASS=keyword>return</font> digest; } string get_digest();};<font CLASS=comment>//</font><font CLASS=comment>// null output stream</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> outnull: public outstm{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawwrite(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*, <font CLASS=keytype>int</font>); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doopen(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doclose();<font CLASS=preproc><font CLASS=keyword>public</font>:</font> outnull(); <font CLASS=keyword>virtual</font> ~outnull(); <font CLASS=keyword>virtual</font> string get_streamname();};<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- unit ---------------------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=preproc>#ifdef</font> _MSC_VER <font CLASS=comment>// disable "type name first seen using 'struct' now seen using 'class'" warning</font><font CLASS=preproc>#</font> pragma warning (disable: <font CLASS=integer>4099</font>) <font CLASS=comment>// disable "class '...' needs to have dll-interface to be used by clients of class </font><font CLASS=comment>// '...'" warning, since the compiler may sometimes give this warning incorrectly.</font><font CLASS=preproc>#</font> pragma warning (disable: <font CLASS=integer>4251</font>) <font CLASS=preproc>#endif</font> <font CLASS=keyword>class</font> unit: public component{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keyword>friend</font> <font CLASS=keyword>class</font> unit_thread; unit* pipe_next; <font CLASS=comment>// next unit in the pipe chain, assigned by connect()</font> unit_thread* main_thread; <font CLASS=comment>// async execution thread, started by run() if necessary</font> <font CLASS=keytype>int</font> running; <font CLASS=comment>// running status, to protect from recursive calls to run() and waitfor()</font> <font CLASS=keytype>void</font> do_main();<font CLASS=preproc><font CLASS=keyword>public</font>:</font> compref<instm> uin; compref<outstm> uout; unit(); <font CLASS=keyword>virtual</font> ~unit(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> classid(); // things that may be overridden in descendant classes <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> main(); <font CLASS=comment>// main code, called from run()</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> cleanup(); <font CLASS=comment>// main code cleanup, called from run()</font> // service methods <font CLASS=keytype>void</font> connect(unit* next); <font CLASS=keytype>void</font> run(<font CLASS=keytype>bool</font> async <font CLASS=symbols>=</font> <font CLASS=keyword>false</font>); <font CLASS=keytype>void</font> waitfor();};<font CLASS=keyword>typedef</font> unit* punit;<font CLASS=keyword>typedef</font> unit CUnit; <font CLASS=comment>// send me a $10 check if you use this alias (not obligatory though,</font> <font CLASS=comment>// because the library is free, after all)</font><font CLASS=comment>//</font><font CLASS=comment>// standard input, output and error devices</font><font CLASS=comment>//</font><font CLASS=keyword>extern</font> infile pin;<font CLASS=keyword>extern</font> logfile pout;<font CLASS=keyword>extern</font> logfile perr;<font CLASS=keyword>extern</font> outnull pnull;<font CLASS=preproc>#ifdef</font> _MSC_VER <font CLASS=preproc>#pragma</font> pack(pop) <font CLASS=preproc>#endif</font> PTYPES_END<font CLASS=preproc>#endif</font> <font CLASS=comment>// __PSTREAMS_H__ </font></pre></div><hr noshade></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -