锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久精品午夜免费不卡,久久精品草草草,久久久精品一区二区三区http://www.shnenglu.com/socketref/category/459.htmlhttps://github.com/adoggiezh-cnThu, 24 Mar 2016 16:15:39 GMTThu, 24 Mar 2016 16:15:39 GMT60鏈夐棶棰樼殑c++閫氫俊浠g爜鐨勮瘑鍒?/title><link>http://www.shnenglu.com/socketref/archive/2016/03/24/213106.html</link><dc:creator>鏀懼眮闃跨嫍 </dc:creator><author>鏀懼眮闃跨嫍 </author><pubDate>Thu, 24 Mar 2016 07:29:00 GMT</pubDate><guid>http://www.shnenglu.com/socketref/archive/2016/03/24/213106.html</guid><wfw:comment>http://www.shnenglu.com/socketref/comments/213106.html</wfw:comment><comments>http://www.shnenglu.com/socketref/archive/2016/03/24/213106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/socketref/comments/commentRss/213106.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/socketref/services/trackbacks/213106.html</trackback:ping><description><![CDATA[     鎽樿: 鏈夐棶棰樼殑c++閫氫俊浠g爜鐨勮瘑鍒紝甯屾湜鍐檆++鐨勭爜鍐滀笉瑕佺姱鍚屾牱鐨勯敊  <a href='http://www.shnenglu.com/socketref/archive/2016/03/24/213106.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/socketref/aggbug/213106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/socketref/" target="_blank">鏀懼眮闃跨嫍 </a> 2016-03-24 15:29 <a href="http://www.shnenglu.com/socketref/archive/2016/03/24/213106.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍔犲揩緙栬瘧閫熷害http://www.shnenglu.com/socketref/archive/2010/10/26/131324.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Tue, 26 Oct 2010 06:01:00 GMThttp://www.shnenglu.com/socketref/archive/2010/10/26/131324.htmlhttp://www.shnenglu.com/socketref/comments/131324.htmlhttp://www.shnenglu.com/socketref/archive/2010/10/26/131324.html#Feedback19http://www.shnenglu.com/socketref/comments/commentRss/131324.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/131324.html緋葷粺瓚婃椂楂︼紝寮鍙戠幆澧冪増鏈秺楂橈紝鏈哄櫒閰嶇疆鍐嶉珮(鎴戠殑閰嶇疆4G,I720),浣唙c鐨勭紪璇戝櫒閫熷害涓鐐歸兘鎻愰珮?shù)笉浜?jiǎn)澶氬皯
鎻愰珮緙栬瘧閫熷害灝濊瘯浜?jiǎn)寰堝鏂规?
1.涔版洿蹇殑鏈哄櫒
2.鏇存崲緙栬瘧鍣紝vc6榪樻槸鑳戒繚鎸佹渶蹇殑閫熷害錛寁s2008絳夌瓑瓚婃潵瓚婂瀮鍦?br>3.鏇存崲鎿嶄綔緋葷粺 win2003
4.浣跨敤鏈嶅姟鍣ㄧ紪璇戯紝鐢?錛?鍙版満鍣ㄥ崗鍚岃繘鏉ョ紪璇戝伐紼?

浠ヤ笂鍧囦笉鑳借鎴戞湁婊℃剰鐨勬晥鏋?br>閭f渶濂界殑鏂瑰紡灝辨槸璋冩暣鑷繁鐨勪唬鐮佺粨鏋勪簡(jiǎn)錛宑緙栬瘧鍣ㄤ負(fù)浣曞鑰佺墰鑸悆鍔涳紝灝辨槸鐢變簬c璇█鐏墊椿甯︽潵鐨勯棶棰橈紝涓嶅悓瀵硅薄鏂囦歡鍏寵仈涓嶆褰撳皢澶уぇ澧炲ぇ浜?jiǎn)缂栬瘧鏃堕棿銆?br>鎵浠ュ湪瀹氫箟宸ョ▼瀵硅薄渚濊禆鍏崇郴鏃訛紝蹇呴』娉ㄦ剰<include> 銆?br>鎴戜竴鑸殑鍋氭硶鏄細(xì)
class A,class B, 閭e湪 a.h 涓厛澹版槑 class B,鐒跺悗瀹氫箟涓涓狟*鍗沖彲
鍙湁鍦╝.c鍐呰鐢ㄥ埌B緇撴瀯鏃舵墠鍔犱笂include "b.h"
榪欐牱浠g爜鍏寵仈灝辨病鏈夐偅涔堢揣瀵嗕簡(jiǎn)錛岀紪璇戝櫒涔熶細(xì)鍙樼殑鑱槑鐐逛簡(jiǎn)錛屼笉浼?xì)鐢变簬涓涓棤鍏崇揣瑕佺殑淇敼錛屽鑷村ぇ鎵歸噺鐨勬簮鏂囦歡琚噸鏂扮紪璇戙?br>





鏀懼眮闃跨嫍 2010-10-26 14:01 鍙戣〃璇勮
]]>
娓告垙IP浠g悊http://www.shnenglu.com/socketref/archive/2010/09/30/128111.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Wed, 29 Sep 2010 17:17:00 GMThttp://www.shnenglu.com/socketref/archive/2010/09/30/128111.htmlhttp://www.shnenglu.com/socketref/comments/128111.htmlhttp://www.shnenglu.com/socketref/archive/2010/09/30/128111.html#Feedback2http://www.shnenglu.com/socketref/comments/commentRss/128111.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/128111.html闃呰鍏ㄦ枃

鏀懼眮闃跨嫍 2010-09-30 01:17 鍙戣〃璇勮
]]>
娓告垙閫嗗悜閫昏緫鎺ュ彛瀹氫箟http://www.shnenglu.com/socketref/archive/2010/09/30/128109.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Wed, 29 Sep 2010 16:40:00 GMThttp://www.shnenglu.com/socketref/archive/2010/09/30/128109.htmlhttp://www.shnenglu.com/socketref/comments/128109.htmlhttp://www.shnenglu.com/socketref/archive/2010/09/30/128109.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/128109.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/128109.html  1 /*  2 gtr_api.h  3 ========...  闃呰鍏ㄦ枃

鏀懼眮闃跨嫍 2010-09-30 00:40 鍙戣〃璇勮
]]>
鍋氭父鎴忎氦鏄撶郴緇燂紝閲囩敤ICE涔嬪悗瀹氫箟鐨勭郴緇熸帴鍙?/title><link>http://www.shnenglu.com/socketref/archive/2010/09/30/128108.html</link><dc:creator>鏀懼眮闃跨嫍 </dc:creator><author>鏀懼眮闃跨嫍 </author><pubDate>Wed, 29 Sep 2010 16:38:00 GMT</pubDate><guid>http://www.shnenglu.com/socketref/archive/2010/09/30/128108.html</guid><wfw:comment>http://www.shnenglu.com/socketref/comments/128108.html</wfw:comment><comments>http://www.shnenglu.com/socketref/archive/2010/09/30/128108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/socketref/comments/commentRss/128108.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/socketref/services/trackbacks/128108.html</trackback:ping><description><![CDATA[<br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">  1</span> <span style="color: #008000;">/*</span><span style="color: #008000;"><br></span><span style="color: #008080;">  2</span> <span style="color: #008000;"><br></span><span style="color: #008080;">  3</span> <span style="color: #008000;">2010.3.25 zhangbin <br></span><span style="color: #008080;">  4</span> <span style="color: #008000;">1.create,瀹氫箟game-core鐨勭綉緇滄帴鍙?br></span><span style="color: #008080;">  5</span> <span style="color: #008000;"><br></span><span style="color: #008080;">  6</span> <span style="color: #008000;">鍗忓畾:<br></span><span style="color: #008080;">  7</span> <span style="color: #008000;">    1.鏁版嵁綾誨瀷鍚嶇О灝鵑儴娣誨姞T<br></span><span style="color: #008080;">  8</span> <span style="color: #008000;"><br></span><span style="color: #008080;">  9</span> <span style="color: #008000;">2010.3.27 zhangin<br></span><span style="color: #008080;"> 10</span> <span style="color: #008000;"><br></span><span style="color: #008080;"> 11</span> <span style="color: #008000;">2010.3.29 zhangbin<br></span><span style="color: #008080;"> 12</span> <span style="color: #008000;">1. 鍙栨秷宸ヤ綔鍗旼ameWorkSheetT緇撴瀯<br></span><span style="color: #008080;"> 13</span> <span style="color: #008000;">2. 淇敼 ISecureService.auth()瀹夊叏璁よ瘉鐨勬暟鎹被鍨?br></span><span style="color: #008080;"> 14</span> <span style="color: #008000;">2010.3.30 zhangbin <br></span><span style="color: #008080;"> 15</span> <span style="color: #008000;">1. heartbeat()縐誨姩鍒癐Service鎺ュ彛<br></span><span style="color: #008080;"> 16</span> <span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;"> 17</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 18</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 19</span> <span style="color: #000000;">#ifndef _GTR_ICE<br></span><span style="color: #008080;"> 20</span> <span style="color: #000000;"></span><span style="color: #0000ff;">#define</span><span style="color: #000000;"> _GTR_ICE</span><span style="color: #000000;"><br></span><span style="color: #008080;"> 21</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 22</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 23</span> <span style="color: #000000;">module gtr {<br></span><span style="color: #008080;"> 24</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 25</span> <span style="color: #000000;">dictionary</span><span style="color: #000000;"><</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">></span><span style="color: #000000;">    HashValueSet;<br></span><span style="color: #008080;"> 26</span> <span style="color: #000000;">dictionary</span><span style="color: #000000;"><</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">></span><span style="color: #000000;">    ReturnValueT;<br></span><span style="color: #008080;"> 27</span> <span style="color: #000000;">sequence</span><span style="color: #000000;"><</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">></span><span style="color: #000000;">                 ByteStreamT;<br></span><span style="color: #008080;"> 28</span> <span style="color: #000000;">sequence</span><span style="color: #000000;"><</span><span style="color: #0000ff;">string</span><span style="color: #000000;">></span><span style="color: #000000;">            StringListT;<br></span><span style="color: #008080;"> 29</span> <span style="color: #000000;">sequence</span><span style="color: #000000;"><</span><span style="color: #000000;">HashValueSet</span><span style="color: #000000;">></span><span style="color: #000000;">    HashValueListT;<br></span><span style="color: #008080;"> 30</span> <span style="color: #000000;">sequence</span><span style="color: #000000;"><</span><span style="color: #0000ff;">int</span><span style="color: #000000;">></span><span style="color: #000000;">                    IntListT;<br></span><span style="color: #008080;"> 31</span> <span style="color: #000000;">sequence</span><span style="color: #000000;"><</span><span style="color: #000000;">StringListT</span><span style="color: #000000;">></span><span style="color: #000000;">    StringListListT;<br></span><span style="color: #008080;"> 32</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 33</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> CallReturnT{<br></span><span style="color: #008080;"> 34</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">bool</span><span style="color: #000000;">    succ;<br></span><span style="color: #008080;"> 35</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> msg;<br></span><span style="color: #008080;"> 36</span> <span style="color: #000000;">    HashValueSet props;<br></span><span style="color: #008080;"> 37</span> <span style="color: #000000;">};<br></span><span style="color: #008080;"> 38</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 39</span> <span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> IMAGEJPEG </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;"> 40</span> <span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> IMAGEPNG </span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;"> ;<br></span><span style="color: #008080;"> 41</span> <span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> IMAGEBMP </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">3</span><span style="color: #000000;"> ;<br></span><span style="color: #008080;"> 42</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 43</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 44</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">鍥懼儚鏁版嵁</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 45</span> <span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> ImageDataT{<br></span><span style="color: #008080;"> 46</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> type;<br></span><span style="color: #008080;"> 47</span> <span style="color: #000000;">    ByteStreamT    bytes;<br></span><span style="color: #008080;"> 48</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> width;<br></span><span style="color: #008080;"> 49</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> height;    <br></span><span style="color: #008080;"> 50</span> <span style="color: #000000;">};<br></span><span style="color: #008080;"> 51</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 52</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameAuthDataT{<br></span><span style="color: #008080;"> 53</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;">             type;     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 1- 鍥劇墖 ,2 - 鍧愭爣</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 54</span> <span style="color: #008000;"></span><span style="color: #000000;">    ImageDataT image; </span><span style="color: #008000;">//</span><span style="color: #008000;">縐樺疂鍥劇墖</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 55</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> seckey;      </span><span style="color: #008000;">//</span><span style="color: #008000;">縐樺疂鍧愭爣</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 56</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;"> 57</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 58</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 59</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameIdentifyT{<br></span><span style="color: #008080;"> 60</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> id;            </span><span style="color: #008000;">//</span><span style="color: #008000;">娓告垙緙栧彿</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 61</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> tradeNo;    </span><span style="color: #008000;">//</span><span style="color: #008000;">浜ゆ槗鍗曞彿</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 62</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;"> 63</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 64</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> ServiceIdentifyT{<br></span><span style="color: #008080;"> 65</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> id;<br></span><span style="color: #008080;"> 66</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> version;<br></span><span style="color: #008080;"> 67</span> <span style="color: #000000;">};<br></span><span style="color: #008080;"> 68</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 69</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 70</span> <span style="color: #000000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> IService{<br></span><span style="color: #008080;"> 71</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;">            getType();             </span><span style="color: #008000;">//</span><span style="color: #008000;">  </span><span style="color: #008000;"><br></span><span style="color: #008080;"> 72</span> <span style="color: #008000;"></span><span style="color: #000000;">    ServiceIdentifyT    getId();                </span><span style="color: #008000;">//</span><span style="color: #008000;">service module id</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 73</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;">                             getTimestamp();        </span><span style="color: #008000;">//</span><span style="color: #008000;">鑾峰彇緋葷粺鏃墮挓  1970涔嬪悗縐掓暟</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 74</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">void</span><span style="color: #000000;">                             shutdown();<br></span><span style="color: #008080;"> 75</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">void</span><span style="color: #000000;">                             heartbeat(</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> senderType,</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> senderId);  </span><span style="color: #008000;">//</span><span style="color: #008000;">鍙戦佽呯被鍨嬪拰Id</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 76</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;"> 77</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 78</span> <span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 79</span> <span style="color: #008000;">enum LogMsgLevelT{<br></span><span style="color: #008080;"> 80</span> <span style="color: #008000;">    logDEBUG,<br></span><span style="color: #008080;"> 81</span> <span style="color: #008000;">    logINFO,<br></span><span style="color: #008080;"> 82</span> <span style="color: #008000;">    logCRITICAL,<br></span><span style="color: #008080;"> 83</span> <span style="color: #008000;">    logERROR<br></span><span style="color: #008080;"> 84</span> <span style="color: #008000;">};<br></span><span style="color: #008080;"> 85</span> <span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;"> 86</span> <span style="color: #000000;">    <br></span><span style="color: #008080;"> 87</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> LogMessageT{<br></span><span style="color: #008080;"> 88</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;">                     xclass;    </span><span style="color: #008000;">//</span><span style="color: #008000;">娑堟伅綾誨瀷    </span><span style="color: #008000;"><br></span><span style="color: #008080;"> 89</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;">                 msg;    <br></span><span style="color: #008080;"> 90</span> <span style="color: #000000;">};<br></span><span style="color: #008080;"> 91</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 92</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">鏃ュ織鍔熻兘</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 93</span> <span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> ILogger {<br></span><span style="color: #008080;"> 94</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> gameMsg(GameIdentifyT gameId,</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> timetick,LogMessageT msg);  </span><span style="color: #008000;">//</span><span style="color: #008000;"> timetick - 1970~ s</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 95</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> gameImage(GameIdentifyT gameId,</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> timetick,</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> opName,ImageDataT image);    </span><span style="color: #008000;">//</span><span style="color: #008000;">鎶撳浘 opName - 鎵ц娓告垙姝ラ鍚嶇О</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 96</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;"> 97</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 98</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">瀹夊叏綆$悊錛屽寘鎷瀹濊璇佺瓑</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 99</span> <span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> ISecure {<br></span><span style="color: #008080;">100</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> auth(GameIdentifyT gameId,GameAuthDataT data); <br></span><span style="color: #008080;">101</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">102</span> <span style="color: #000000;"><br></span><span style="color: #008080;">103</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">鏃ュ織鏈嶅姟鍣?/span><span style="color: #008000;"><br></span><span style="color: #008080;">104</span> <span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> ILogServer extends ILogger,IService{<br></span><span style="color: #008080;">105</span> <span style="color: #000000;">    <br></span><span style="color: #008080;">106</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">107</span> <span style="color: #000000;"><br></span><span style="color: #008080;">108</span> <span style="color: #000000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> ISecureServer extends ISecure,IService{<br></span><span style="color: #008080;">109</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">110</span> <span style="color: #000000;"><br></span><span style="color: #008080;">111</span> <span style="color: #000000;"><br></span><span style="color: #008080;">112</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">涓涓父鎴忎換鍔$浉鍏崇殑淇℃伅</span><span style="color: #008000;"><br></span><span style="color: #008080;">113</span> <span style="color: #008000;"></span><span style="color: #0000ff;">enum</span><span style="color: #000000;"> GameWorkSheetTypeT{<br></span><span style="color: #008080;">114</span> <span style="color: #000000;">    gwsPost,                    </span><span style="color: #008000;">//</span><span style="color: #008000;">閭瘎</span><span style="color: #008000;"><br></span><span style="color: #008080;">115</span> <span style="color: #008000;"></span><span style="color: #000000;">    gwsAccountAudit, </span><span style="color: #008000;">//</span><span style="color: #008000;">甯愬彿瀹℃牳</span><span style="color: #008000;"><br></span><span style="color: #008080;">116</span> <span style="color: #008000;"></span><span style="color: #000000;">    gwsVerify                </span><span style="color: #008000;">//</span><span style="color: #008000;">楠岃瘉</span><span style="color: #008000;"><br></span><span style="color: #008080;">117</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">118</span> <span style="color: #000000;"><br></span><span style="color: #008080;">119</span> <span style="color: #000000;"><br></span><span style="color: #008080;">120</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">閭瘎</span><span style="color: #008000;"><br></span><span style="color: #008080;">121</span> <span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameWorkSheetPostT {<br></span><span style="color: #008080;">122</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">long</span><span style="color: #000000;"> money;        <br></span><span style="color: #008080;">123</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">124</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">瀹℃牳</span><span style="color: #008000;"><br></span><span style="color: #008080;">125</span> <span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameWorkSheetAccountAuditT {<br></span><span style="color: #008080;">126</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> any;<br></span><span style="color: #008080;">127</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">128</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">楠岃瘉</span><span style="color: #008000;"><br></span><span style="color: #008080;">129</span> <span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameWorkSheetVerifyT {<br></span><span style="color: #008080;">130</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> any;<br></span><span style="color: #008080;">131</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">132</span> <span style="color: #000000;"><br></span><span style="color: #008080;">133</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">浜ゆ槗浠誨姟淇℃伅<br></span><span style="color: #008080;">134</span> <span style="color: #008000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">Tasklet鍖呭惈鎵鏈夌殑涓氬姟澶勭悊綾誨瀷錛屼絾鍚屾椂鍙湁涓縐嶆湁鏁?/span><span style="color: #008000;"><br></span><span style="color: #008080;">135</span> <span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameTaskletT{<br></span><span style="color: #008080;">136</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> id;                            </span><span style="color: #008000;">//</span><span style="color: #008000;">浠誨姟緙栧彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">137</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;">      type;                            </span><span style="color: #008000;">//</span><span style="color: #008000;">澶勭悊綾誨瀷</span><span style="color: #008000;"><br></span><span style="color: #008080;">138</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> no;            </span><span style="color: #008000;">//</span><span style="color: #008000;">鍗曞彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">139</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> gameId;    </span><span style="color: #008000;">//</span><span style="color: #008000;">娓告垙緙栧彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">140</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> account;    </span><span style="color: #008000;">//</span><span style="color: #008000;">甯愬彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">141</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> password;<br></span><span style="color: #008080;">142</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> area;        </span><span style="color: #008000;">//</span><span style="color: #008000;">鍖?/span><span style="color: #008000;"><br></span><span style="color: #008080;">143</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> server;    </span><span style="color: #008000;">//</span><span style="color: #008000;">鏈嶅姟鍣?/span><span style="color: #008000;"><br></span><span style="color: #008080;">144</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> lineName;</span><span style="color: #008000;">//</span><span style="color: #008000;">綰胯礬鍚嶇О(涓虹┖鍒檒ineNo)</span><span style="color: #008000;"><br></span><span style="color: #008080;">145</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">short</span><span style="color: #000000;">     lineNo;    </span><span style="color: #008000;">//</span><span style="color: #008000;">綰胯礬緙栧彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">146</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> createTime;<br></span><span style="color: #008080;">147</span> <span style="color: #000000;">    <br></span><span style="color: #008080;">148</span> <span style="color: #000000;">    GameWorkSheetPostT post;    </span><span style="color: #008000;">//</span><span style="color: #008000;">閭瘎</span><span style="color: #008000;"><br></span><span style="color: #008080;">149</span> <span style="color: #008000;"></span><span style="color: #000000;">    GameWorkSheetAccountAuditT audit;<br></span><span style="color: #008080;">150</span> <span style="color: #000000;">    GameWorkSheetVerifyT        verify;<br></span><span style="color: #008080;">151</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">152</span> <span style="color: #000000;"><br></span><span style="color: #008080;">153</span> <span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> GameTaskResultT{<br></span><span style="color: #008080;">154</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> id;        </span><span style="color: #008000;">//</span><span style="color: #008000;">浠誨姟緙栧彿</span><span style="color: #008000;"><br></span><span style="color: #008080;">155</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> no;        </span><span style="color: #008000;">//</span><span style="color: #008000;">鍗曞彿 (鍐椾綑)</span><span style="color: #008000;"><br></span><span style="color: #008080;">156</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> gameId;    </span><span style="color: #008000;">//</span><span style="color: #008000;">娓告垙緙栧彿(鍐椾綑)</span><span style="color: #008000;"><br></span><span style="color: #008080;">157</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> result;        </span><span style="color: #008000;">//</span><span style="color: #008000;">澶勭悊緇撴灉</span><span style="color: #008000;"><br></span><span style="color: #008080;">158</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> errmsg;    </span><span style="color: #008000;">//</span><span style="color: #008000;">鎻愮ず淇℃伅    </span><span style="color: #008000;"><br></span><span style="color: #008080;">159</span> <span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">160</span> <span style="color: #000000;"><br></span><span style="color: #008080;">161</span> <span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">gtr鎺у埗鏈嶅姟绔帴鍙?/span><span style="color: #008000;"><br></span><span style="color: #008080;">162</span> <span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> IGameHost extends IService,ILogger,ISecure{    <br></span><span style="color: #008080;">163</span> <span style="color: #000000;">    GameTaskletT                    getTask();        </span><span style="color: #008000;">//</span><span style="color: #008000;">鑾峰彇浠誨姟</span><span style="color: #008000;"><br></span><span style="color: #008080;">164</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">void</span><span style="color: #000000;">                                    completeTask(GameTaskResultT result);         </span><span style="color: #008000;">//<br></span><span style="color: #008080;">165</span> <span style="color: #008000;"></span><span style="color: #000000;">    <br></span><span style="color: #008080;">166</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">167</span> <span style="color: #000000;"><br></span><span style="color: #008080;">168</span> <span style="color: #000000;"><br></span><span style="color: #008080;">169</span> <span style="color: #000000;"><br></span><span style="color: #008080;">170</span> <span style="color: #000000;">};<br></span><span style="color: #008080;">171</span> <span style="color: #000000;"><br></span><span style="color: #008080;">172</span> <span style="color: #000000;"><br></span><span style="color: #008080;">173</span> <span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">174</span> <span style="color: #000000;"><br></span><span style="color: #008080;">175</span> <span style="color: #000000;"></span></div> <br><br><img src ="http://www.shnenglu.com/socketref/aggbug/128108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/socketref/" target="_blank">鏀懼眮闃跨嫍 </a> 2010-09-30 00:38 <a href="http://www.shnenglu.com/socketref/archive/2010/09/30/128108.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鑰冭檻璁捐涓縐嶄究鎹風(fēng)殑閫氫俊搴?/title><link>http://www.shnenglu.com/socketref/archive/2010/05/10/114999.html</link><dc:creator>鏀懼眮闃跨嫍 </dc:creator><author>鏀懼眮闃跨嫍 </author><pubDate>Mon, 10 May 2010 07:27:00 GMT</pubDate><guid>http://www.shnenglu.com/socketref/archive/2010/05/10/114999.html</guid><wfw:comment>http://www.shnenglu.com/socketref/comments/114999.html</wfw:comment><comments>http://www.shnenglu.com/socketref/archive/2010/05/10/114999.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/socketref/comments/commentRss/114999.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/socketref/services/trackbacks/114999.html</trackback:ping><description><![CDATA[Ice鐨勮璁℃濇兂闈炲父濂?閫氳繃slice瀹氫箟涔嬪悗浜х敓涓鍫嗙殑閫氫俊妗嗘灦浠g爜鏉ヨ嚜鍔ㄥ寲瀹屾垚瀵硅薄鏁版嵁鐨勫簭鍒楀寲<br>鐢變簬ice鏄熀浜嶳pc鐨?搴曞眰閫氫俊緇嗚妭琚睆钄芥帀浜?鐢氳嚦鏄繛鎺ョ殑鑷姩閲嶅寤虹珛,鍙枩鍙堝彲鎮(zhèn)?鏈変簺搴旂敤蹇呴』瑕佸叧蹇?jī)杩欎簺搴曢儴鐨勯氫俊緇嗚妭,<br>濡傛灉鐩存帴鐢╯ocket鍙堝珜澶夯鐑?chǔ)浜?jiǎn),涓嶅悓鐨勫簲鐢ㄩ兘鏄湪閲嶅鐨勮繘琛屽紑鍙戦氫俊鍗忚,瑙e寘鍜屾墦鍖呰姳閿寰堝緢澶氱殑綺懼姏,榪欎簺宸ヤ綔閮芥槸閲嶅鐨?娌℃湁鎶鏈惈閲忚屼笖瀹規(guī)槗鍑洪敊.<br>涔嬪墠寮鍙戣繃mtslib閫氫俊搴撴潵瑙e喅socket閫氫俊闂,浣夸袱绔兘鏄互娑堟伅鍖呯殑褰㈠紡榪涜閫氫俊,瑙e喅浜?jiǎn)socket涓ゆbuffer鐨勭鐞?br>涔熺湅榪噄ce鐨勪唬鐮佸疄鐜?slice2cpp鐢▂acc&lex榪涜璇嶆硶璇硶鐨勫鐞?br>瀵硅薄鐨勮嚜鍔ㄥ簭鍒楀寲榪欐槸鎴戞墍鎰熷叴瓚g殑,鍚宨ce涓鏍鋒彁渚涗竴涓氫俊鐜,鐒跺悗鐢ㄦ埛鍙互鑷畾涔夎嚜宸辯殑閫氫俊鏁版嵁,閫氳繃idl鐨勫艦寮忚嚜鍔ㄤ駭鐢熷簭鍒楀寲浠g爜騫剁紪璇戣繘鐢ㄦ埛宸ョ▼.<br>榪欑鏂瑰紡涓巌ce鍙堜笉鍚屽湪浜庢病鏈夐偅涔堝偦鐡滃寲,浣嗙畝鍖栦簡(jiǎn)鐢ㄦ埛澶勭悊娑堟伅鎶ョ殑榪囩▼.<br>榪欐牱瑕佸畬鎴愪竴涓被浼糹ce鐨剅pc璋冪敤涔熸槸娌℃湁閭d箞綆鍗?br>yacc/lex,lemon,<br><br><img src ="http://www.shnenglu.com/socketref/aggbug/114999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/socketref/" target="_blank">鏀懼眮闃跨嫍 </a> 2010-05-10 15:27 <a href="http://www.shnenglu.com/socketref/archive/2010/05/10/114999.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀹屾垚swMap鍩烘湰鍔熻兘http://www.shnenglu.com/socketref/archive/2009/08/21/93983.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Thu, 20 Aug 2009 19:27:00 GMThttp://www.shnenglu.com/socketref/archive/2009/08/21/93983.htmlhttp://www.shnenglu.com/socketref/comments/93983.htmlhttp://www.shnenglu.com/socketref/archive/2009/08/21/93983.html#Feedback2http://www.shnenglu.com/socketref/comments/commentRss/93983.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/93983.html鐜板湪swMap鑳藉仛鍩烘湰demo涓涓佺偣鐨勫姛鑳戒簡(jiǎn)錛岃闂細(xì) www.sw2us.com/maps.php 鎴栬?http://220.196.42.107/main.php
褰撳垵鑰冭檻鍒版斁寮冧箣鍓嶇殑涓滆タ鑰冭檻鐨勯棶棰樻湁寰堝錛屽綋鐒舵湁鍏徃鐨勭煡璇嗕駭鏉冮棶棰橈紝鏈涓昏鐨勬槸涔嬪墠鐨勪駭鍝佹妧鏈疄鍦ㄦ槸璁捐鐨勬湁鐐圭碂緋曘傚仛寮鍙戠殑鐭ラ亾鐪嬪埆浜虹殑浠g爜騫朵笖鍦ㄨ繖鍩虹涓婂幓鍙戞壃鍏夊ぇ榪欐椂闂村緢澶村ぇ鍜岀棝鑻︾殑浜嬫儏錛岀壒鍒槸紕板埌閭d簺鍘熸湰灝辨槸姣旇緝?yōu)畞闂拰宸姴鐨勪笢瑗裤?br>鍑熻嚜宸辯殑鐨勫緢澶氭兂娉曞紑濮嬪紑鍙憇wMap欏圭洰錛屼互鍓嶇殑涓滆タ閮芥姏寮冩病鏈夊仛鍙傝冿紝浠庡師濮嬪湴鍥懼姞宸ヨ璁°佸湴鍥炬覆鏌撴湇鍔″櫒寮鍙戙佺劧鍚庡氨鏄熀浜嶱c鍜學(xué)ince鐨勫鎴風(fēng)寮鍙戯紝鏀寔鏈湴鍜岃繙紼嬪姞杞藉湴鍥劇殑鏂瑰紡錛岄噸鏂拌璁$殑鏁版嵁瀛樺偍鏂瑰紡闄や簡(jiǎn)淇濈暀綆鍗曠殑緗戞牸瀛樺偍鍜屾悳瀵伙紝宸茬粡鎶婂湴鍥炬暟鎹繘琛岀渷浠界殑鍒嗗壊錛岃屼笉鍍忎互鍓嶅繀欏誨姞杞藉崟鐙殑涓涓叏鍥藉湴鍥炬暟鎹寘錛涘湴鍥劇綉鏍間篃璁捐鎴愪簡(jiǎn)澶氱綉鏍煎ぇ灝忓艦寮忥紝浠ヤ究鏀寔鍚屼竴涓湴鍥炬枃浠朵腑浠繪剰澶氱殑緙╂斁姣斿拰鍦板浘灞傘?br>寮鍙戞繪槸寰堣緵鑻︼紝姣忓ぉ閮芥槸瑕佸仛鍒板娣變漢闈?br>瀛︿範(fàn)浜?jiǎn)寰堝涓滆タ锛屾濊冧簡(jiǎn)寰堝涓滆タ錛屽弽澶嶇殑涔熸湁寰堝錛屾渶緇堣繕鏄嚟鍊熻嚜宸辨瘮杈冨鐨勭煡璇嗛潰錛岃繍鐢ㄤ簡(jiǎn)寰堝opensource鐨勬妧鏈紝鏃墮棿鍜屾晥鐜囧綋鐒舵槸闈炲父閲嶈鐨勶紝鎵浠ユ病鏈夎嚜宸卞幓閲嶆柊瀹炵幇涓浜涘熀紜鐨勪笢瑗匡紝姣斿matrix灝辨槸浠巆airo搴撲腑鐩存帴鎶勮繃鏉ョ殑銆?br>鍦ㄧ敤c++寮鍙戝湴鍥炬湇鍔″櫒鍜屽鎴風(fēng)鏃跺欎篃鑰冭檻浜?jiǎn)涓嶅悓鐨勯氫俊鏂瑰紡鍜屾搷浣滅郴緇熺幆澧冿紝灝藉彲鑳界殑鍙互鏀寔鏇村鐨勮繍琛岀幆澧冦?br>鍘熸湰璁″垝鍦ㄦ槰鏅歸ince鐗堟湰涔嬪悗椹笂鏀寔symbian鎿嶄綔緋葷粺錛屼絾瀵箂ymbian鐨勫紑鍙戠爺絀朵簡(jiǎn)涔嬪悗璁╂垜澶уけ鎵鏈涳紝鍏跺紑鍙戞槸闈炲父浣庢晥鐨勪笖閫氱敤鎬ц兘澶樊錛屽悗鏉ョ綉涓婂緱鐭okia椹笂灝嗘姏寮僺ymbian鑰屾鎶眑inux浜?jiǎn)锛寴q欎護(hù)鎴戞垜椹笂鑰冭檻浜?jiǎn)绉绘linux鐨勬兂娉?br>寰堝浜鴻窡鎴戞彁鍒伴潤(rùn)鎬佺綉欏靛湴鍥炬柟寮忥紝褰撶劧鎴戜笉鑳藉仛鍒板儚google錛宱penlayers榪欎箞寮虹殑瀹㈡埛绔錛屼篃娌$簿鍔涘幓鏀寔ogc閭d箞鐨刧is鍗忚鍦ㄥ湴鍥炬湇鍔″櫒涓婏紝鎵浠ヨ兘婕旂ず鍩虹鐨勫湴鍥懼姛鑳藉紑鍙戜簡(jiǎn)php鐨勫睍紺虹銆?br>flex鍜宻liverlight閮芥槸闈炲父濂界殑鎶鏈紝浣嗗浜巑s涓鐩存病鏈夊ソ鎰燂紝鎵浠lex褰㈡垚浜?jiǎn)鎴戦夋嫨鍙︿竴涓睍紺哄鎴風(fēng)鐨勬兂娉曘?br>緗戜笂涓嬩簡(jiǎn)涓鍫嗙殑flex鏁版嵁錛屽墠鍚庝粠鎺ヨЕactionscript鍒板仛濂絪wFlex瀹㈡埛绔竴鍏辮姳浜?澶╂椂闂達(dá)紝鍙戣瓚婃潵瓚婂枩嬈㈣繖涓笢瑗夸簡(jiǎn)錛岀湅鏉ヤ互鍚庣殑鍓嶇寮鍙戣鍏ㄦ崲鎴恌lex騫沖彴浜?jiǎn)銆?br>鐩墠鍋氬緱swMap鐨勫姛鑳介潪甯告湁闄愶紝鍦板浘澶勭悊涔熸槸寰堢畝鍗曪紝鐢氳嚦榪炴枃鏈爣娉ㄩ兘娌℃湁娣誨姞錛屽彧鏄彁渚涗簡(jiǎn)25涓浘灞?6綰у埆緙╂斁姣斿湪瀹㈡埛绔睍紺恒?br>鎴戞兂寰呮垜鏈夋椂闂達(dá)紝鎴戝皢榪欎簺閮戒細(xì)瀹屽杽璧鋒潵
鍘熸湰寰堝甯﹀紑鍙戠殑鎶鏈篃娌℃湁鍘誨仛錛屾瘮濡俛gg錛屽湴鍥?鍙夋爲(wèi)銆丷Tree錛孉*璺敱綆楁硶
鏈嬪弸緇欐垜鐨勫嚑涓狦ps妯″潡璁懼榪欏嚑澶╄璋冮氬茍鏀劇疆鍒板湴鍥句笂鍘?br>


鏀懼眮闃跨嫍 2009-08-21 03:27 鍙戣〃璇勮
]]>
auto_ptr/shared_ptr/week_ptr differenceshttp://www.shnenglu.com/socketref/archive/2008/07/13/55992.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Sat, 12 Jul 2008 16:34:00 GMThttp://www.shnenglu.com/socketref/archive/2008/07/13/55992.htmlhttp://www.shnenglu.com/socketref/comments/55992.htmlhttp://www.shnenglu.com/socketref/archive/2008/07/13/55992.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/55992.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/55992.html



鏀懼眮闃跨嫍 2008-07-13 00:34 鍙戣〃璇勮
]]>
WINCE 璁劇疆鐜鍙橀噺-緋葷粺鍔犺澆璺緞http://www.shnenglu.com/socketref/archive/2008/07/04/55279.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Thu, 03 Jul 2008 17:24:00 GMThttp://www.shnenglu.com/socketref/archive/2008/07/04/55279.htmlhttp://www.shnenglu.com/socketref/comments/55279.htmlhttp://www.shnenglu.com/socketref/archive/2008/07/04/55279.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/55279.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/55279.html        TCHAR pText[] = _T("\\Windows\\0\\NandFlashPartition\\MediaLib\0\\Storage Card\\MediaLib\0\0");
        CString strText(pText,sizeof(pText));
        SaveMultString(HKEY_LOCAL_MACHINE,_T("Loader"),_T("SystemPath"),strText,sizeof(pText));

        DeleteKey(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\sample\\PLAY"));
    }


鏀懼眮闃跨嫍 2008-07-04 01:24 鍙戣〃璇勮
]]>
wxWidget鐨勫璇█http://www.shnenglu.com/socketref/archive/2008/07/04/55272.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Thu, 03 Jul 2008 17:19:00 GMThttp://www.shnenglu.com/socketref/archive/2008/07/04/55272.htmlhttp://www.shnenglu.com/socketref/comments/55272.htmlhttp://www.shnenglu.com/socketref/archive/2008/07/04/55272.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/55272.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/55272.html闃呰鍏ㄦ枃

鏀懼眮闃跨嫍 2008-07-04 01:19 鍙戣〃璇勮
]]>
鍑芥暟char2Hex()http://www.shnenglu.com/socketref/archive/2008/06/23/54318.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Sun, 22 Jun 2008 16:58:00 GMThttp://www.shnenglu.com/socketref/archive/2008/06/23/54318.htmlhttp://www.shnenglu.com/socketref/comments/54318.htmlhttp://www.shnenglu.com/socketref/archive/2008/06/23/54318.html#Feedback1http://www.shnenglu.com/socketref/comments/commentRss/54318.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/54318.html{
    string str = "";
    int n = a;
    for (int i=2*sizeof(char) - 1; i>=0; i--)
    {
        str += "0123456789ABCDEF"[((n >> i*4) & 0xF)];
    }
    return str;
}


鏀懼眮闃跨嫍 2008-06-23 00:58 鍙戣〃璇勮
]]>
lua-蹇熼槄璇?/title><link>http://www.shnenglu.com/socketref/archive/2008/05/13/49689.html</link><dc:creator>鏀懼眮闃跨嫍 </dc:creator><author>鏀懼眮闃跨嫍 </author><pubDate>Mon, 12 May 2008 19:13:00 GMT</pubDate><guid>http://www.shnenglu.com/socketref/archive/2008/05/13/49689.html</guid><wfw:comment>http://www.shnenglu.com/socketref/comments/49689.html</wfw:comment><comments>http://www.shnenglu.com/socketref/archive/2008/05/13/49689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/socketref/comments/commentRss/49689.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/socketref/services/trackbacks/49689.html</trackback:ping><description><![CDATA[<br>table 鏄釜鎬墿錛屾湁寰堝facets,綾諱技array,map,struct,鏁翠釜鏄釜娣峰悎鐗╋紝鐢ㄨ搗鏉ヤ篃姣旇緝鎬紓銆?br>t={1,2,3,a="gen",b=100}<br>t={[0]=1;["name"]="ultra"}<br>t.a, t.b , t[0] , t["name"]<br><br>琛ㄦ搷浣滃嚱鏁? <br>ipairs,pairs榪唬鍑芥暟<br>table.getn(t)   len of table<br><br>================================================================<br>function() 鍙互鎺ュ彈浠繪剰澶氱殑鍙傛暟錛屽鏋滃疄鍙傛暟榪囧灝嗕涪寮冿紝榪囧皯灝嗛粯璁よ緗負(fù)nil<br>鍚屾牱鍙互榪斿洖澶氫釜鍙傛暟<br>a,b=foo()<br><br>琛ㄤ綔涓哄弬鏁頒紶閫掑埌function<br>function rename( arg ) os.rename(arg.old,arg.new) end<br>rename{old="";new=""}<br><br>鍖垮悕鍑芥暟(lambda in python )<br>foo = function(x) return x*2 end<br>灞閮ㄥ嚱鏁?local f=function(x) ... end<br>================================================================<br>for n=start,end,step do ... end<br>while b do   ... end<br>repeat do .... until<br><br>if then .. elseif then ...  end;<br><br>鏈夋剰鎬濈殑璇硶琛ㄨ揪寮? <br>    print a or b or c   濡傛灉a=false,灝濊瘯b...<br><br>娉ㄩ噴: --     --{ --}  <br><br><br>瀛楃涓叉搷浣?    .. 榪炴帴<br><br>==================================================<br>io 鍑芥暟: <br>loadfile('test.lua')()    execute external lua script<br>loadstring('print 100')()<br><br><br>浠g爜嫻嬭瘯: <br>=======================<br><span style="color: red;">c紼嬪簭璋冪敤lua鍑芥暟</span><br>c 紼嬪簭:<br>void call_lua_func(){<br>    lua_State *s = lua_open();<br>    luaL_openlibs(s);<br>    int c = lua_gettop(s);<br>    luaL_dofile(s,"/nandflashpartition/test1.lua");<br>    lua_getglobal(s,"add");<br>    lua_pushnumber(s,0.25);<br>    lua_pushnumber(s,8);<br>    if( lua_pcall(s,2,1,0)){<br>        std::cout<< lua_tostring(s,-1)<<std::endl;<br>    }<br>    double r;<br>    r = lua_tonumber(s,-1);<br>    lua_close(s);<br>}<br>lua紼嬪簭:<br>function add(x,y)<br>    return x*y<br>end<br>--------------------------------<br><span style="color: red;">lua璁塊棶c紼嬪簭絀洪棿鍙橀噺</span><br><br>1.瀹氫箟鍙橀噺student.h<br>extern char * gender;<br>extern int class_count;<br><br>2.鍒涘緩pkg鏂囦歡 student.pkg<br>$#include "student.h"<br>extern char * gender;<br>extern int class_count;<br><br>3.浜х敓tolua++瀛樻牴妗嗘灦<br>tolua++ -o student.pkg<br><br>4.鍒涘緩lua嫻嬭瘯浠g爜 call_c.lua<br>print(gender)<br>print(class_count)  璁塊棶c 絀洪棿鐨勫彉閲?br><br>5.c嫻嬭瘯浠g爜<br>char * gender;<br>int class_count;<br>void lua_call_c(){<br>    int  tolua_student_open (lua_State* tolua_S);<br>    lua_State * s = lua_open();<br>    luaopen_base(s);<br><br>    gender ="my gender is male!";<br>    class_count = 100;<br>    tolua_student_open(s);<br>    luaL_dofile(s,"/nandflashpartition/call_c.lua");<br>    lua_close(s);<br>}<br><br>6.build && test it!<br><br><br><br> <img src ="http://www.shnenglu.com/socketref/aggbug/49689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/socketref/" target="_blank">鏀懼眮闃跨嫍 </a> 2008-05-13 03:13 <a href="http://www.shnenglu.com/socketref/archive/2008/05/13/49689.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢?C 灝佽 涓插彛鏁版嵁鍗忚錛屽彲鐢ㄤ簬嫻佸紡浼犺緭http://www.shnenglu.com/socketref/archive/2007/02/23/18931.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Fri, 23 Feb 2007 14:54:00 GMThttp://www.shnenglu.com/socketref/archive/2007/02/23/18931.htmlhttp://www.shnenglu.com/socketref/comments/18931.htmlhttp://www.shnenglu.com/socketref/archive/2007/02/23/18931.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/18931.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/18931.html#define INOUT
#define IN

#define INIT_LIST_HEAD(x)聽(tīng)聽(tīng) 聽(tīng)

#define btsc_TRUE 聽(tīng)聽(tīng) 聽(tīng)0
#define btsc_FALSE聽(tīng)聽(tīng) 聽(tīng)1
#define btsc_NULL 聽(tīng)聽(tīng) 聽(tīng)0

struct list_head{
聽(tīng)聽(tīng) 聽(tīng)struct list_head* prev,*next;
};


struct btsc_Property{
聽(tīng)聽(tīng) 聽(tīng)char * 聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)name;
聽(tīng)聽(tīng) 聽(tīng)char * 聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)value;聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
};


struct btsc_Packet{
聽(tīng)聽(tīng) 聽(tīng)/*struct list_head聽(tīng)聽(tīng) 聽(tīng)list;*/
聽(tīng)聽(tīng) 聽(tīng)struct btsc_Property** 聽(tīng)聽(tīng) 聽(tīng)properties;
聽(tīng)聽(tīng) 聽(tīng)int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)size;
聽(tīng)聽(tīng) 聽(tīng)int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)capacity;
聽(tīng)聽(tīng) 聽(tīng)struct btsc_Context聽(tīng)聽(tīng) 聽(tīng)*聽(tīng)聽(tīng) 聽(tīng)ctx;
};

struct btsc_Packet* 聽(tīng)聽(tīng) 聽(tīng)btsc_Packet_Alloc(struct btsc_Context* );
void聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Packet_Free(struct btsc_Packet*);

struct btsc_Property*聽(tīng)聽(tīng) 聽(tīng)btsc_Property_Alloc(struct btsc_Context* ,char * name,char * value);
void聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Property_Free(struct btsc_Property*);


struct btsc_Property* 聽(tīng)聽(tīng) 聽(tīng)btsc_Property_Get(struct btsc_Packet* packet,char * name); 聽(tīng)聽(tīng) 聽(tīng)
void聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Property_Append(struct btsc_Packet* packet,struct btsc_Property * );


struct btsc_Context{
聽(tīng)聽(tīng) 聽(tīng)void (*tx)(struct btsc_Context*,unsigned char * data,int len);聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)int (*notifier)(struct btsc_Packet* packet);/*澶栭儴閲婃斁packet,榪斿洖NULL*/聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)packet_cached_size;
聽(tīng)聽(tīng) 聽(tīng)int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)recv_cached_capacity;聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)char*聽(tīng)聽(tīng) 聽(tīng)recv_buff;聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)recv_size;聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)void*聽(tīng)聽(tīng) 聽(tīng)user;聽(tīng)聽(tīng) 聽(tīng)// 澶栭儴鏁版嵁浼犻捖?tīng)?聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
};


int 聽(tīng)聽(tīng) 聽(tīng)btsc_init(struct btsc_Context* IN ctx);聽(tīng)聽(tīng) 聽(tīng)
void 聽(tīng)聽(tīng) 聽(tīng)btsc_cleanup(struct btsc_Context* IN ctx);
int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Pack(struct btsc_Context* IN ctx,struct btsc_Packet* packet,unsigned char * INOUT buff,int* INOUT size);聽(tīng)聽(tīng) 聽(tīng)
void聽(tīng)聽(tīng) 聽(tīng)btsc_Parse(struct btsc_Context* , char * data,int len);


#define BTSC_PACKET_BEGIN(ctx) {\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)struct btsc_Context* _ctx_internel;\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)struct btsc_Packet * _pkt ;\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_ctx_internel= (ctx);\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_pkt = btsc_Packet_Alloc(_ctx_internel);
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
/* key is not suitable for vairable*/聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
#define BTSC_NEW_PROPERTY(key,value)聽(tīng)聽(tīng) 聽(tīng){\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)struct btsc_Property * _ppt =btsc_Property_Alloc(_ctx_internel,key,value);\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Property_Append(_pkt,_ppt);\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)}
#define BTSC_PACKET_END()聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Pack(_ctx_internel,_pkt,btsc_NULL,0);\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)btsc_Packet_Free(_pkt);\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)}

#define BTSC_FOREACH(packet,ppt)聽(tīng)聽(tīng) 聽(tīng){\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)int n;\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)for(n=0;n<packet->size;n++){\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)ppt = packet->properties[n];
#define BTSC_END_FOREACH()聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)}\
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)}








/*
聽(tīng)聽(tīng)聽(tīng) name:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btsc
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) serial communicating聽(tīng) with bluetooth and app-user
聽(tīng)聽(tīng)聽(tīng) desc:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pair parameter codec
聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) packet=[ key:name,...]
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) implemented: 聽(tīng)聽(tīng)聽(tīng) zhangbin ,聽(tīng) 3 hours occupied
聽(tīng)聽(tīng)聽(tīng) date:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 2007-01-26
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _UNIX
#include <unistd.h>
#endif
#include "btsc.h"

#define PACKET_HEAD聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) '<'
#define PACKET_TAIL聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) '>'
#define PROPERTY_DELIMITER聽(tīng)聽(tīng)聽(tīng) ','
#define PAIR_DELIMITER聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) '='
#define ESCAPE_CHAR聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) '\\'


int calcEscapleLength(char * str);
char* escape_copy(char * dest,char * src);
void trim_escape_copy(char * dest,char * src,int size);
int聽(tīng) calcPacketLength(struct btsc_Packet* pkt);
int聽(tīng)聽(tīng)聽(tīng) is_escape_char(char c);
void parseProperty(struct btsc_Packet * pkt,char * s,char * e);
void parsePacket(struct btsc_Context* ctx,char * s,char* e);
char* 聽(tīng)聽(tīng)聽(tīng) __memchr(char * s,char* e,char c);

char escape_ch_table[]={PACKET_HEAD,PACKET_TAIL,PROPERTY_DELIMITER,PAIR_DELIMITER,ESCAPE_CHAR,'\0'};

struct btsc_Packet* 聽(tīng)聽(tīng)聽(tīng) btsc_Packet_Alloc(struct btsc_Context* ctx){聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) struct btsc_Packet * pt = malloc(sizeof(struct btsc_Packet));聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) pt->size = 0;
聽(tīng)聽(tīng)聽(tīng) pt->capacity = ctx->packet_cached_size;
聽(tīng)聽(tīng)聽(tīng) pt->properties=malloc(pt->capacity*sizeof(struct btsc_Property*));聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) pt->ctx = ctx;
聽(tīng)聽(tīng)聽(tīng) return pt;聽(tīng)聽(tīng)聽(tīng)
}

void聽(tīng)聽(tīng)聽(tīng) btsc_Packet_Free(struct btsc_Packet* pt){聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property** tmp;
聽(tīng)聽(tīng)聽(tīng) if( !pt ) 聽(tīng)聽(tīng)聽(tīng) return ;
聽(tīng)聽(tīng)聽(tīng) tmp = pt->properties;
聽(tīng)聽(tīng)聽(tīng) while(pt->size--){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btsc_Property_Free(*tmp++);聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) if( pt->properties){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) free(pt->properties);聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) free(pt);
}


struct btsc_Property*聽(tīng)聽(tīng)聽(tīng) btsc_Property_Alloc(struct btsc_Context* ctx,char * name,char * value){
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property * ppt;
聽(tīng)聽(tīng)聽(tīng) printf("enter btsc_Property_Alloc()\n");
聽(tīng)聽(tīng)聽(tīng) ppt = malloc( sizeof( struct btsc_Property) );
聽(tīng)聽(tīng)聽(tīng) if(!ppt)聽(tīng)聽(tīng)聽(tīng) printf("error: malloc failed (s1)\n");
聽(tīng)聽(tīng)聽(tīng) ppt->name = malloc( strlen(name)+1);
聽(tīng)聽(tīng)聽(tīng) if( !ppt->name ) printf("error: malloc failed (s2)\n");
聽(tīng)聽(tīng)聽(tīng) strcpy(ppt->name,name);聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) ppt->value = malloc( strlen(value)+1);
聽(tīng)聽(tīng)聽(tīng) if( !ppt->value) printf("error: malloc failed (s3),str:%s, len: %d\n",value,strlen(value)+1);
聽(tīng)聽(tīng)聽(tīng) strcpy( ppt->value,value);
聽(tīng)聽(tīng)聽(tīng) return ppt;
}

void聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btsc_Property_Free(struct btsc_Property* ppt){
聽(tīng)聽(tīng)聽(tīng) if( !ppt )聽(tīng)聽(tīng)聽(tīng) return;
聽(tīng)聽(tīng)聽(tīng) free( ppt->name);
聽(tīng)聽(tīng)聽(tīng) free( ppt->value);
聽(tīng)聽(tīng)聽(tīng) free( ppt);
}

/* scan pointer array */
struct btsc_Property* 聽(tīng)聽(tīng)聽(tīng) btsc_Property_Get(struct btsc_Packet* pkt,char * name){
聽(tīng)聽(tīng)聽(tīng) int size;
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property* ppt;
聽(tīng)聽(tīng)聽(tīng) size = pkt->size;
聽(tīng)聽(tīng)聽(tīng) while(size--){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt = pkt->properties[size];
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( !strcmp( name, ppt->name ) ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return ppt;/*that's ok */
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) return btsc_NULL;
}

/* low effeciency, memory allocation,more costs*/
void聽(tīng)聽(tīng)聽(tīng) btsc_Property_Append(struct btsc_Packet* pt,struct btsc_Property * ppt){
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property** tmpppt;
聽(tīng)聽(tīng)聽(tīng) if( pt->size==pt->capacity){ 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pt->capacity += pt->ctx->packet_cached_size;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) tmpppt = pt->properties;聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pt->properties = malloc( pt->capacity * sizeof( struct btsc_Property**) );
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memcpy( pt->properties, tmpppt, pt->size * sizeof( struct btsc_Property**));
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) free( tmpppt);
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) pt->properties[pt->size++]=ppt;聽(tīng)聽(tīng)聽(tīng)
}

int 聽(tīng)聽(tīng)聽(tīng) btsc_init(struct btsc_Context* ctx){聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) ctx->packet_cached_size = 10;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) if( ctx->recv_cached_capacity==0){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_cached_capacity = 1024*2;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) ctx->recv_buff = malloc( ctx->recv_cached_capacity );
聽(tīng)聽(tīng)聽(tīng) ctx->recv_size = 0;
聽(tīng)聽(tīng)聽(tīng) return btsc_TRUE;
}

void 聽(tīng)聽(tīng)聽(tīng) btsc_cleanup(struct btsc_Context* ctx){
聽(tīng)聽(tīng)聽(tīng) free(ctx->recv_buff);聽(tīng)聽(tīng)聽(tīng)
}

/*
**聽(tīng)聽(tīng)聽(tīng) name:聽(tīng)聽(tīng)聽(tīng) calcEscapleLength
**聽(tīng)聽(tīng)聽(tīng) desc:聽(tīng)聽(tīng)聽(tīng) 璁$畻鍚漿涔夊瓧絎︿覆闀垮害
*/
int 聽(tīng)聽(tīng)聽(tīng) calcEscapleLength(char * str){
聽(tīng)聽(tīng)聽(tīng) int len;
聽(tīng)聽(tīng)聽(tīng) char * pesc;
聽(tīng)聽(tīng)聽(tīng) len = 0;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) while( *str ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pesc = escape_ch_table;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) while( *pesc ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *pesc==*str){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) break;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pesc++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) str++;
聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) return len;
}


char* escape_copy(char * dest,char * src){
聽(tīng)聽(tīng)聽(tīng) char * pesc;
聽(tīng)聽(tīng)聽(tīng) while( *src ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pesc = escape_ch_table;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) while( *pesc ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *pesc==*src){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *dest++=ESCAPE_CHAR;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) break;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pesc++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *dest++=*src++;聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) return dest;聽(tīng)聽(tīng)聽(tīng)
}

void trim_escape_copy(char * dest,char * src,int size){
聽(tīng)聽(tīng)聽(tīng) int last_escape = btsc_FALSE;
聽(tīng)聽(tīng)聽(tīng) while( size--){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *src == ESCAPE_CHAR && last_escape != btsc_TRUE){聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) last_escape = btsc_TRUE聽(tīng)聽(tīng)聽(tīng) ;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) src++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) continue;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) last_escape = btsc_FALSE;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *dest++=*src++;聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
}

int聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) calcPacketLength(struct btsc_Packet* pkt){
聽(tīng)聽(tīng)聽(tīng) int len;
聽(tīng)聽(tīng)聽(tīng) int size;
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property* ppt;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) len = 0;
聽(tīng)聽(tīng)聽(tīng) size = pkt->size;
聽(tīng)聽(tīng)聽(tīng) while( size--){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt = pkt->properties[size];聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len+=strlen(ppt->name)+strlen(ppt->value);聽(tīng)聽(tīng)聽(tīng)

聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len+= calcEscapleLength(ppt->name);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len+= calcEscapleLength(ppt->value);聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) len+= pkt->size*2+1;
聽(tīng)聽(tīng)聽(tīng) return聽(tīng) len;
}


int聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btsc_Pack(struct btsc_Context*聽(tīng) ctx,struct btsc_Packet* pkt,unsigned char * obuff,int* osize){
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property* ppt;
聽(tīng)聽(tīng)聽(tīng) int size;
聽(tīng)聽(tīng)聽(tīng) int len;
聽(tīng)聽(tīng)聽(tīng) unsigned char * buff;
聽(tīng)聽(tīng)聽(tīng) char * pbuff;
聽(tīng)聽(tīng)聽(tīng) len = calcPacketLength( pkt);
聽(tīng)聽(tīng)聽(tīng) buff = malloc( len );
聽(tīng)聽(tīng)聽(tīng) size = pkt->size;
聽(tīng)聽(tīng)聽(tīng) pbuff = (char*)buff;
聽(tīng)聽(tīng)聽(tīng) *pbuff++=PACKET_HEAD;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) while( size--){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt = pkt->properties[size];聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pbuff = escape_copy(pbuff,ppt->name);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *pbuff++=PAIR_DELIMITER;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pbuff = escape_copy(pbuff,ppt->value);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( size ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *pbuff++=PROPERTY_DELIMITER;聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) *pbuff = PACKET_TAIL;
聽(tīng)聽(tīng)聽(tīng) if( ctx->tx ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->tx(ctx,buff,len);
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) if( obuff && *osize >=len){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memcpy( obuff, buff ,len);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) *osize = len;
聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng) free(buff);
聽(tīng)聽(tīng)聽(tīng) return btsc_TRUE;聽(tīng)聽(tīng)聽(tīng)
}

/* e not in range*/
char* 聽(tīng)聽(tīng)聽(tīng) __memchr(char * s,char* e,char c){
聽(tīng)聽(tīng)聽(tīng) while( s!=e){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *s == c){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return s;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) s++;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) return btsc_NULL;
}

int聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) is_escape_char(char c){
聽(tīng)聽(tīng)聽(tīng) return btsc_FALSE;聽(tīng)聽(tīng)聽(tīng)
}

/*
聽(tīng)聽(tīng)聽(tīng) name: parseProperty
聽(tīng)聽(tīng)聽(tīng) desc: 鎸囧畾鍐呭瓨鑼冨洿涓彁鍙栧睘鎬?key=>value
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 鎼滅儲(chǔ)鍖呭惈e
聽(tīng)聽(tīng)聽(tīng) params:聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) pkt聽(tīng)聽(tīng)聽(tīng) --聽(tīng)聽(tīng)聽(tīng) 娑堟伅鏁版嵁鍖?br />聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) s聽(tīng)聽(tīng)聽(tīng) --聽(tīng)聽(tīng)聽(tīng) 璧峰鍐呭瓨鍦板潃
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) e聽(tīng)聽(tīng)聽(tīng) --聽(tīng)聽(tīng)聽(tīng) 緇撴潫鍦板潃 ,
*/
void parseProperty(struct btsc_Packet * pkt,char * s,char * e){
聽(tīng)聽(tīng)聽(tīng) char * p1,*p2;
聽(tīng)聽(tīng)聽(tīng) int n;
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property*聽(tīng)聽(tīng)聽(tīng) ppt;
聽(tīng)聽(tīng)聽(tīng) p1 = s ;
聽(tīng)聽(tīng)聽(tīng) p2 = e;
__REPEAT:聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) p1 = __memchr(p1,e+1,PAIR_DELIMITER);
聽(tīng)聽(tīng)聽(tīng) if( p1 ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *(p1-1) == ESCAPE_CHAR ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto __REPEAT;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt = malloc( sizeof( struct btsc_Property ));
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) n = p1-s; 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt->name = malloc( n+1 );
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memset(ppt->name,0,n+1);聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) trim_escape_copy(ppt->name,s,n);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) n =e-p1;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ppt->value = malloc( n+1);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memset(ppt->value,0,n+1);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) trim_escape_copy(ppt->value,p1+1,n);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btsc_Property_Append(pkt,ppt);
聽(tīng)聽(tīng)聽(tīng) }
}

/*
聽(tīng)聽(tīng)聽(tīng) name: parsePacket
聽(tīng)聽(tīng)聽(tīng) desc:聽(tīng)聽(tīng)聽(tīng) 鍒嗚В鎸囧畾鍐呭瓨鍒板寘緇撴瀯
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 鎴愬姛鍒嗚В鍑哄寘绔嬪埢鍥為佸埌搴旂敤鎺ユ敹鑰?( btsc_Context::notifier)
聽(tīng)聽(tīng)聽(tīng) param:
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) s,e 聽(tīng)聽(tīng)聽(tīng) 鍐呭瓨鍦板潃 (澶別)

** 緙撳啿鍖鴻繕闇榪涗竴姝ユ祴璇?鍖呮嫭緙撳啿鍖哄ぇ灝忚皟鑺? 涓嶅畬鏁村崗璁寘鏍煎紡鐨勫閿?br />*/
void 聽(tīng)聽(tīng)聽(tīng) parsePacket(struct btsc_Context* ctx,char * s,char* e){
聽(tīng)聽(tīng)聽(tīng) char *p,*p1,*p2;
聽(tīng)聽(tīng)聽(tīng) struct btsc_Packet * pkt;
聽(tīng)聽(tīng)聽(tīng) if( e-s <=1 ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return ;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) pkt = btsc_Packet_Alloc(ctx);
聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) p1 = s+1;
聽(tīng)聽(tīng)聽(tīng) p2 = e-1;
聽(tīng)聽(tīng)聽(tīng) p = p1;
__REPEAT:聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) p = __memchr(p,e,PROPERTY_DELIMITER);
聽(tīng)聽(tīng)聽(tīng) if( p ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *(p-1)==ESCAPE_CHAR){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p = p+1;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto __REPEAT;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) parseProperty(pkt,p1,p-1);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1 = ++p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto __REPEAT;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) /*allow one property reside in*/
聽(tīng)聽(tīng)聽(tīng) parseProperty(pkt,p1,e-1);
聽(tīng)聽(tīng)聽(tīng) if( ctx->notifier ){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) if(ctx->notifier(pkt)){ /* nonzero value錛?delete internal*/
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) btsc_Packet_Free(pkt);聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) }else{
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng) btsc_Packet_Free(pkt);聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
}

void聽(tīng)聽(tīng)聽(tīng) btsc_Parse(struct btsc_Context* ctx, char * data,int size){
聽(tīng)聽(tīng)聽(tīng) int len ;
_RESTART:
聽(tīng)聽(tīng)聽(tīng) while( size ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len = ctx->recv_cached_capacity - ctx->recv_size;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( len >0){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( size <= len){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) len = size;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) size = 0;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }else{
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) size-=len;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memcpy( ctx->recv_buff+ctx->recv_size,data,len);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_size+=len;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) data+=len;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) {
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) char * p1,*p2;聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
_RESCAN:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1 = ctx->recv_buff;
_RESCAN_HEAD:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1 = __memchr(p1,ctx->recv_buff+ctx->recv_size,PACKET_HEAD);聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( !p1 ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_size =0;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( size ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto _RESTART;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( p1>ctx->recv_buff && *(p1-1)==ESCAPE_CHAR){ /* "\<" */
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto _RESCAN_HEAD;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) /*move backward*/
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_size -=(p1-ctx->recv_buff);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memmove(ctx->recv_buff,p1, ctx->recv_size);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p1=ctx->recv_buff;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p2 = p1+1;
_RESCAN_TAIL:聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p2 = __memchr(p2,ctx->recv_buff+ctx->recv_size,PACKET_TAIL);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( !p2 ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( ctx->recv_size == ctx->recv_cached_capacity ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_size聽(tīng) = 0;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto _RESTART;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( *(p2-1) == ESCAPE_CHAR ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p2++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto _RESCAN_TAIL;聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) parsePacket(ctx,p1,p2);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ctx->recv_size -=p2-p1+1;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( ctx->recv_size ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) memmove(ctx->recv_buff,p2+1,ctx->recv_size);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) goto _RESCAN;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) }
}

/*聽(tīng)聽(tīng) debug */
#ifdef _DEBUGX
void tx(unsigned char * data,int len);
void notifier(struct btsc_Packet* packet);
/*鍒濆鍖栦笂涓嬫枃錛?tx=鍙戦佸鐞嗗嚱鏁?notifier=鎺ユ敹鍑芥暟*/
struct btsc_Context c={tx:tx,notifier:notifier};

/*嫻嬭瘯鏁版嵁鎺ユ敹騫惰В鏋?/
void rx(){聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)char * msg="<MSG=HELLO,NAME=SCOTT>"
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) "<MSG2=HELLO2,NAME2=SCOTT2>"
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) "<MSG3=HELLO3,NAME3=SCOTT3>"; /*simulating data*/
聽(tīng)聽(tīng)聽(tīng) int len = strlen(msg);
聽(tīng)聽(tīng)聽(tīng) btsc_Parse(&c,msg,len);
}
/*鍙戦佸鐞嗚繃紼?/
void tx(unsigned char * buff,int len){聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) char *outmsg = malloc(1024*10);
聽(tīng)聽(tīng)聽(tīng) memset(outmsg,0,1024*10);
聽(tīng)聽(tīng)聽(tīng) memcpy(outmsg,buff,len);
聽(tīng)聽(tīng)聽(tīng) printf("encode str: %s\n",outmsg);
聽(tīng)聽(tīng)聽(tīng) free(outmsg);
聽(tīng)聽(tīng)聽(tīng) btsc_Parse(&c,buff,len);
}

void notifier(struct btsc_Packet* packet){
聽(tīng)聽(tīng)聽(tīng) struct btsc_Property * ppt;
聽(tīng)聽(tīng)聽(tīng) ppt = btsc_Property_Get(packet,"MSG");
聽(tīng)聽(tīng)聽(tīng) if(ppt)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) printf("property get: MSG=>%s\n",ppt->value);
聽(tīng)聽(tīng)聽(tīng) /*閬嶅巻鍖呭唴灞炴у弬鏁?/
聽(tīng)聽(tīng)聽(tīng) BTSC_FOREACH(packet,ppt);
聽(tīng)聽(tīng)聽(tīng) printf("packet: %s=>%s\n",ppt->name,ppt->value);
聽(tīng)聽(tīng)聽(tīng) BTSC_END_FOREACH();
}

int main(){
聽(tīng)聽(tīng)聽(tīng) int r;
聽(tīng)聽(tīng)聽(tīng) /*optional*/
聽(tīng)聽(tīng)聽(tīng) c.recv_cached_capacity = 1024; /*鍒濆鍖栨帴鏀剁紦鍐插尯澶у皬 byte*/
聽(tīng)聽(tīng)聽(tīng) c.packet_cached_size = 5;聽(tīng)聽(tīng)聽(tīng) /*娑堟伅鍖呯紦鍐插睘鎬т釜鏁?/
聽(tīng)聽(tīng)聽(tīng) btsc_init(&c);聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) /*涓婁笅鏂囧垵濮嬪寲*/
聽(tīng)聽(tīng)聽(tīng) puts("test rx()...");
聽(tīng)聽(tīng)聽(tīng) rx();聽(tīng)聽(tīng)聽(tīng) /*鎺?/
聽(tīng)聽(tīng)聽(tīng) puts("escape testing...");聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) do{
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) /*鏋勯犳秷鎭寘,騫跺畬鎴愬彂閫?/
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) BTSC_PACKET_BEGIN(&c);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) BTSC_NEW_PROPERTY("MSG","calling");

聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) BTSC_PACKET_END();聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) usleep(1000*50);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) printf(">>seq:%d\n",r);
聽(tīng)聽(tīng)聽(tīng) }while(0);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) btsc_cleanup(&c);聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) return 0;
}


#endif



鏀懼眮闃跨嫍 2007-02-23 22:54 鍙戣〃璇勮
]]>
闅忎究鍐欎釜 綰跨▼綾?鐜╃帺http://www.shnenglu.com/socketref/archive/2007/02/23/18930.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Fri, 23 Feb 2007 14:47:00 GMThttp://www.shnenglu.com/socketref/archive/2007/02/23/18930.htmlhttp://www.shnenglu.com/socketref/comments/18930.htmlhttp://www.shnenglu.com/socketref/archive/2007/02/23/18930.html#Feedback3http://www.shnenglu.com/socketref/comments/commentRss/18930.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/18930.html#define _BT_THREAD_H

#include <windows.h>

class btworkThread{
public:
聽(tīng)聽(tīng) 聽(tīng)btworkThread( void(*entry)(btworkThread* ,void*),void* user){聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_entry = entry;聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_param = user;
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_thandle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)btworkThread::run,user,NULL,&_tid);
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)void聽(tīng)聽(tīng) 聽(tīng)stop(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_loop = false;
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)void聽(tīng)聽(tīng) 聽(tīng)wait(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)while(!_end){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)Sleep(20);
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)Sleep(20);聽(tīng) // ensure that thread has terminated
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)void聽(tīng)聽(tīng) 聽(tīng)stopAndWait(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)stop();wait();
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)bool聽(tīng)聽(tīng) 聽(tīng)loop(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)return _loop;
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)void聽(tīng)聽(tīng) 聽(tīng)code_begin(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_loop = true; _begin = true;_end=false;
聽(tīng)聽(tīng) 聽(tīng)}
聽(tīng)聽(tīng) 聽(tīng)void聽(tīng)聽(tīng) 聽(tīng)code_end(){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)_loop = false; _begin = false;_end=true;
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)CloseHandle(_thandle);
聽(tīng)聽(tīng) 聽(tīng)}
protected:
聽(tīng)聽(tīng) 聽(tīng)static void聽(tīng)聽(tīng) 聽(tīng)run(btworkThread* thread){
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)thread->_entry(thread,thread->_param);
聽(tīng)聽(tīng) 聽(tīng)}
private:
聽(tīng)聽(tīng) 聽(tīng)volatile bool聽(tīng)聽(tīng) 聽(tīng)_loop,_begin,_end;
聽(tīng)聽(tīng) 聽(tīng)void (*_entry)(btworkThread* ,void*);
聽(tīng)聽(tīng) 聽(tīng)void*聽(tīng)聽(tīng) 聽(tīng)_param;
聽(tīng)聽(tīng) 聽(tīng)DWORD聽(tīng)聽(tīng) 聽(tīng)_tid;
聽(tīng)聽(tīng) 聽(tīng)HANDLE聽(tīng)聽(tīng) 聽(tīng)_thandle;
};

鏀懼眮闃跨嫍 2007-02-23 22:47 鍙戣〃璇勮
]]>
闂叉潵鏃犱簨錛屽啓涓櫤鑳芥寚閽堢被 鐜╃帺http://www.shnenglu.com/socketref/archive/2007/02/23/18929.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Fri, 23 Feb 2007 14:39:00 GMThttp://www.shnenglu.com/socketref/archive/2007/02/23/18929.htmlhttp://www.shnenglu.com/socketref/comments/18929.htmlhttp://www.shnenglu.com/socketref/archive/2007/02/23/18929.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/18929.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/18929.html
template <typename T>
class SmartHandlePtr{
聽(tīng)聽(tīng)聽(tīng) struct Handle{
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) Handle(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) ptr = NULL;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) cnt = 0;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) void*聽(tīng)聽(tīng)聽(tīng) ptr;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) int聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) cnt;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btLock聽(tīng)聽(tīng)聽(tīng) lock;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) void聽(tīng)聽(tīng)聽(tīng) inc(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btScopeLock sl(lock);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) cnt++;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) void聽(tīng)聽(tīng)聽(tīng) dec(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) btScopeLock sl(lock);
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) cnt--;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) };
public:
聽(tīng)聽(tīng)聽(tīng) SmartHandlePtr(const T* p){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph = new Handle;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph->ptr =(void*) p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph->inc();
聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng) ~SmartHandlePtr(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( _ph ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph->dec();
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( _ph->cnt==0){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) T* p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p = (T*)_ph->ptr;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( p ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) delete p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) delete _ph;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng) SmartHandlePtr(const SmartHandlePtr& shp){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( _ph ){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph->dec();
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( _ph->cnt==0){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) T* p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) p = (T*)_ph->ptr;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( p){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) delete p;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) delete _ph;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph = _ph;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) _ph->inc();
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) bool operator==(const T* p) {
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return _ph->ptr == p;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) bool operator==(const SmartHandlePtr& shp){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return _ph == shp._ph;
聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng) T* operator->(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return (T*)_ph->ptr;
聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng) T* get(){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) if( _ph && _ph->ptr){
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return (T*)_ph->ptr;
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) return NULL;
聽(tīng)聽(tīng)聽(tīng) }

private:
聽(tīng)聽(tīng)聽(tīng) Handle*聽(tīng)聽(tīng)聽(tīng) _ph;
};


鏀懼眮闃跨嫍 2007-02-23 22:39 鍙戣〃璇勮
]]>
亚洲AV日韩精品久久久久| 久久久久久A亚洲欧洲AV冫| 人妻丰满?V无码久久不卡| 伊人久久大香线焦综合四虎| 精品久久综合1区2区3区激情| 久久国产精品99精品国产987| 国产亚洲精久久久久久无码AV| 亚洲国产精品成人久久蜜臀| 欧美一区二区三区久久综| 亚洲综合精品香蕉久久网97| 亚洲第一永久AV网站久久精品男人的天堂AV | 国内精品九九久久久精品| 久久99国产精品久久99| 亚洲国产成人精品91久久久| 国产A三级久久精品| 久久精品国产久精国产| 久久伊人五月天论坛| 99久久免费国产精精品| 久久无码高潮喷水| 国产精品久久久久久久| 久久久久久亚洲精品无码| 老色鬼久久亚洲AV综合| 久久久高清免费视频| 精品国产青草久久久久福利| 久久99精品国产麻豆| 一本色道久久综合狠狠躁| 久久久久99精品成人片三人毛片| 99久久久国产精品免费无卡顿| 伊人情人综合成人久久网小说| 久久精品免费网站网| 99久久国产综合精品麻豆| 久久久av波多野一区二区| 少妇无套内谢久久久久| 久久国产乱子伦精品免费午夜| 久久精品一区二区| 狠狠色噜噜狠狠狠狠狠色综合久久| 亚洲午夜久久久久久久久电影网 | 中文无码久久精品| 久久久久久无码国产精品中文字幕 | 久久久国产乱子伦精品作者| 国产成人精品久久|