﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-socketref-随笔分类-Ice/xmlrpc</title><link>http://www.cppblog.com/socketref/category/484.html</link><description>gis,mouse,luolasi</description><language>zh-cn</language><lastBuildDate>Mon, 24 Jan 2011 23:25:00 GMT</lastBuildDate><pubDate>Mon, 24 Jan 2011 23:25:00 GMT</pubDate><ttl>60</ttl><item><title>django 与外部应用服务器通信</title><link>http://www.cppblog.com/socketref/archive/2011/01/24/139194.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sun, 23 Jan 2011 16:06:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2011/01/24/139194.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/139194.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2011/01/24/139194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/139194.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/139194.html</trackback:ping><description><![CDATA[想到这个问题已经是有一段时间了，目前要启动项目，所以又仔细想了一下。<br>django框架不同于j2EE，weblogic就是个很好的基于j2ee的应用服务器，里面有很多设施，都是常驻在内存的，这样的服务器还有Tomcat之类的。<br>但我了解的django同php一样采用平面数据库来记录用户会话，状态等信息，效率上没有直接从内存中读取的要快。而我的项目需求涉及的数据组织方式是树形的嵌套结构的业务数据结构，虽然存放在平面的数据表中，但是在查询的时候每一次都要多次的操作表记录，效果很低。<br>例如： 会员表字段( 会员编号，介绍人编号，节点人编号），一个成员即可以是会员，也可以是介绍人或者是节点人，所以在一条记录关联到多条记录或者被多次关联，那在查询的时候要列出 （会员名，介绍人名，节点人名），编写的sql将比较繁琐，如果写成一条的话，可以用inner jion或者 select in的方式实现，但是由于数据库内部要创建多个记录缓冲来搜寻，导致效率极低。<br>不得不考虑在django外部开发独立的应用服务程序，运行时加载会员表中的所有成员信息，并以指针的形式将这个会员拓扑树表现出来，那在查询检索的时候根据id和会员名称做个hash表，根据id直接定位到拓扑树的节点上，这个节点的子几点可以是指向介绍人、节点人节点的地址，那检索的速度可以提高100倍。<br>就这么决定了，所以想着 django要与外部应用程序交互的问题，当然是想到了ice通信框架。<br>在mod_python配置参数中有一项： <br>
<pre class="cn literal-block" id="cn74">PythonHandler django.core.handlers.modpython<br>modpython.py这个代码只要修改了之后mod_python将重新加载，且这个模块将常驻内存，好了，可以把他当做一个入口服务实例了，<br>ice的初始化就放在modpython.handler()函数内，通过request参数传递到调用的每个模块内，<br>开心了！<br></pre>
<br><img src ="http://www.cppblog.com/socketref/aggbug/139194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2011-01-24 00:06 <a href="http://www.cppblog.com/socketref/archive/2011/01/24/139194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpServer+ TileCache</title><link>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 18 Nov 2010 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/134002.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/134002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/134002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; TileCache从去年开始使用已经有一段时间了，之前是为了配合GeoServer来产生缓存网格块，之后在3-8月份处于停滞状态，到9月份身体开始恢复就重新启动swMap工程，彻底抛弃了GeoServer(效率和安装运行环境不能满足要求)。在使用geoServer期间，采用Tilecache产生了千万的tile图块，默认是存放在文件系统，产生的Tile在备份迁移的时候令我寒心，那么多的文件拷贝每次都要耗费4，5个小时，考虑到这种情况，我自己编写了TileCache的Store Backend，将Tilecache产生的Tile存储进PostGresDB，这样我只要备份DB就可以了。<br>&nbsp;&nbsp;&nbsp; 随即而来的是放弃Geoserver，自己重新开发地图渲染服务器，使用了QT令我效果满意，那再使用那一套GeoServer的东西就不合时宜了，TileCache也是需要绑定Apache+mod_python才能工作，简直太累最了，配置个环境还是不太容易，想想自己只是想提供一个WMS的服务罢了何必那么麻烦呢。 地图服务器也有了，产生CacheTiles也开发了自动化的工具，将全国不同显示比例的图块按256x256规格分别放入多个文件，这样备份起来就快速多了。<br>&nbsp;&nbsp;&nbsp; 之前看过TileCache的代码，那时候只是为了编写一个新的Cache Store backend，现在重新回过头来，我决定抛弃apache，语言还是用python，之前做一个酒店广告投放系统时开发过一个Http代理服务器，所以轻车熟路了，保留其Http服务功能，加上TileCache的WMS服务代码，一个swMap的WMS 服务器就可以诞生了。<br>&nbsp;&nbsp;&nbsp; 端详了一会儿TileCache，发现是多么的简单，几乎不用多修改什么地方就可以完成。<br>&nbsp;&nbsp;&nbsp; 由于我的swMap服务程序提供了预先缓存和实时绘制地图的功能，所以通过Http可以以两种模式进行，当然实时模式是用于调试地图层SLD时派上大用场。<br>&nbsp;&nbsp;&nbsp; 实时绘制的时候我的WMS服务器通过Ice连接到swMap服务器，当缓存访问时我的WMS服务器直接从本地Tile文件中读取，那时多么舒服的事情哪！ <br><br><br><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/134002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-11-18 16:49 <a href="http://www.cppblog.com/socketref/archive/2010/11/18/134002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做游戏交易系统，采用ICE之后定义的系统接口</title><link>http://www.cppblog.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.cppblog.com/socketref/archive/2010/09/30/128108.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/128108.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/09/30/128108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/128108.html</wfw:commentRss><trackback:ping>http://www.cppblog.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;">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #008000;">/*</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000;">2010.3.25&nbsp;zhangbin&nbsp;<br></span><span style="color: #008080;">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000;">1.create,定义game-core的网络接口<br></span><span style="color: #008080;">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000;">协定:<br></span><span style="color: #008080;">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;1.数据类型名称尾部添加T<br></span><span style="color: #008080;">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #008000;">2010.3.27&nbsp;zhangin<br></span><span style="color: #008080;">&nbsp;10</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;11</span>&nbsp;<span style="color: #008000;">2010.3.29&nbsp;zhangbin<br></span><span style="color: #008080;">&nbsp;12</span>&nbsp;<span style="color: #008000;">1.&nbsp;取消工作单GameWorkSheetT结构<br></span><span style="color: #008080;">&nbsp;13</span>&nbsp;<span style="color: #008000;">2.&nbsp;修改&nbsp;ISecureService.auth()安全认证的数据类型<br></span><span style="color: #008080;">&nbsp;14</span>&nbsp;<span style="color: #008000;">2010.3.30&nbsp;zhangbin&nbsp;<br></span><span style="color: #008080;">&nbsp;15</span>&nbsp;<span style="color: #008000;">1.&nbsp;heartbeat()移动到IService接口<br></span><span style="color: #008080;">&nbsp;16</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;17</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;18</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;19</span>&nbsp;<span style="color: #000000;">#ifndef&nbsp;_GTR_ICE<br></span><span style="color: #008080;">&nbsp;20</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_GTR_ICE</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;21</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;22</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;23</span>&nbsp;<span style="color: #000000;">module&nbsp;gtr&nbsp;{<br></span><span style="color: #008080;">&nbsp;24</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;25</span>&nbsp;<span style="color: #000000;">dictionary</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;HashValueSet;<br></span><span style="color: #008080;">&nbsp;26</span>&nbsp;<span style="color: #000000;">dictionary</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ReturnValueT;<br></span><span style="color: #008080;">&nbsp;27</span>&nbsp;<span style="color: #000000;">sequence</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteStreamT;<br></span><span style="color: #008080;">&nbsp;28</span>&nbsp;<span style="color: #000000;">sequence</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringListT;<br></span><span style="color: #008080;">&nbsp;29</span>&nbsp;<span style="color: #000000;">sequence</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">HashValueSet</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;HashValueListT;<br></span><span style="color: #008080;">&nbsp;30</span>&nbsp;<span style="color: #000000;">sequence</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntListT;<br></span><span style="color: #008080;">&nbsp;31</span>&nbsp;<span style="color: #000000;">sequence</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">StringListT</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;StringListListT;<br></span><span style="color: #008080;">&nbsp;32</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;33</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;CallReturnT{<br></span><span style="color: #008080;">&nbsp;34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;succ;<br></span><span style="color: #008080;">&nbsp;35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;msg;<br></span><span style="color: #008080;">&nbsp;36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;HashValueSet&nbsp;props;<br></span><span style="color: #008080;">&nbsp;37</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;38</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;39</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;IMAGEJPEG&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;40</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;IMAGEPNG&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;;<br></span><span style="color: #008080;">&nbsp;41</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;IMAGEBMP&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;;<br></span><span style="color: #008080;">&nbsp;42</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;43</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;44</span>&nbsp;<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;">&nbsp;45</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;ImageDataT{<br></span><span style="color: #008080;">&nbsp;46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;type;<br></span><span style="color: #008080;">&nbsp;47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ByteStreamT&nbsp;&nbsp;&nbsp;&nbsp;bytes;<br></span><span style="color: #008080;">&nbsp;48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;width;<br></span><span style="color: #008080;">&nbsp;49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;height;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;50</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;51</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;52</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameAuthDataT{<br></span><span style="color: #008080;">&nbsp;53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;1-&nbsp;图片&nbsp;,2&nbsp;-&nbsp;坐标</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;54</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ImageDataT&nbsp;image;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">秘宝图片</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;55</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;seckey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">秘宝坐标</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;56</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;57</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;58</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;59</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameIdentifyT{<br></span><span style="color: #008080;">&nbsp;60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">游戏编号</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;61</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;tradeNo;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">交易单号</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;62</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;63</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;64</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;ServiceIdentifyT{<br></span><span style="color: #008080;">&nbsp;65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;id;<br></span><span style="color: #008080;">&nbsp;66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;version;<br></span><span style="color: #008080;">&nbsp;67</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;68</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;69</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;70</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;IService{<br></span><span style="color: #008080;">&nbsp;71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getType();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;72</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ServiceIdentifyT&nbsp;&nbsp;&nbsp;&nbsp;getId();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">service&nbsp;module&nbsp;id</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;73</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getTimestamp();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">获取系统时钟&nbsp;&nbsp;1970之后秒数</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;74</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdown();<br></span><span style="color: #008080;">&nbsp;75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heartbeat(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;senderType,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;senderId);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">发送者类型和Id</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;76</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;77</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;78</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;79</span>&nbsp;<span style="color: #008000;">enum&nbsp;LogMsgLevelT{<br></span><span style="color: #008080;">&nbsp;80</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;logDEBUG,<br></span><span style="color: #008080;">&nbsp;81</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;logINFO,<br></span><span style="color: #008080;">&nbsp;82</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;logCRITICAL,<br></span><span style="color: #008080;">&nbsp;83</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;logERROR<br></span><span style="color: #008080;">&nbsp;84</span>&nbsp;<span style="color: #008000;">};<br></span><span style="color: #008080;">&nbsp;85</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;87</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;LogMessageT{<br></span><span style="color: #008080;">&nbsp;88</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xclass;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">消息类型&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;89</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;90</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;91</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;92</span>&nbsp;<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;">&nbsp;93</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ILogger&nbsp;{<br></span><span style="color: #008080;">&nbsp;94</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;gameMsg(GameIdentifyT&nbsp;gameId,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;timetick,LogMessageT&nbsp;msg);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;timetick&nbsp;-&nbsp;1970~&nbsp;s</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;95</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;gameImage(GameIdentifyT&nbsp;gameId,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;timetick,</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;opName,ImageDataT&nbsp;image);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">抓图&nbsp;opName&nbsp;-&nbsp;执行游戏步骤名称</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;96</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;97</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;98</span>&nbsp;<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;">&nbsp;99</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ISecure&nbsp;{<br></span><span style="color: #008080;">100</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;auth(GameIdentifyT&nbsp;gameId,GameAuthDataT&nbsp;data);&nbsp;<br></span><span style="color: #008080;">101</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">102</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">103</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ILogServer&nbsp;extends&nbsp;ILogger,IService{<br></span><span style="color: #008080;">105</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">106</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">107</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">108</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ISecureServer&nbsp;extends&nbsp;ISecure,IService{<br></span><span style="color: #008080;">109</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">110</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">111</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">112</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">enum</span><span style="color: #000000;">&nbsp;GameWorkSheetTypeT{<br></span><span style="color: #008080;">114</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;gwsPost,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">邮寄</span><span style="color: #008000;"><br></span><span style="color: #008080;">115</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;gwsAccountAudit,&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">帐号审核</span><span style="color: #008000;"><br></span><span style="color: #008080;">116</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;gwsVerify&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">验证</span><span style="color: #008000;"><br></span><span style="color: #008080;">117</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">118</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">119</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">120</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameWorkSheetPostT&nbsp;{<br></span><span style="color: #008080;">122</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;money;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">123</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">124</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameWorkSheetAccountAuditT&nbsp;{<br></span><span style="color: #008080;">126</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;any;<br></span><span style="color: #008080;">127</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">128</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameWorkSheetVerifyT&nbsp;{<br></span><span style="color: #008080;">130</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;any;<br></span><span style="color: #008080;">131</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">132</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">133</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">交易任务信息<br></span><span style="color: #008080;">134</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameTaskletT{<br></span><span style="color: #008080;">136</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">任务编号</span><span style="color: #008000;"><br></span><span style="color: #008080;">137</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">处理类型</span><span style="color: #008000;"><br></span><span style="color: #008080;">138</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;no;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">单号</span><span style="color: #008000;"><br></span><span style="color: #008080;">139</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;gameId;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">游戏编号</span><span style="color: #008000;"><br></span><span style="color: #008080;">140</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;account;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">帐号</span><span style="color: #008000;"><br></span><span style="color: #008080;">141</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;password;<br></span><span style="color: #008080;">142</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;area;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">区</span><span style="color: #008000;"><br></span><span style="color: #008080;">143</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;server;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">服务器</span><span style="color: #008000;"><br></span><span style="color: #008080;">144</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;lineName;</span><span style="color: #008000;">//</span><span style="color: #008000;">线路名称(为空则lineNo)</span><span style="color: #008000;"><br></span><span style="color: #008080;">145</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">short</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lineNo;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">线路编号</span><span style="color: #008000;"><br></span><span style="color: #008080;">146</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;createTime;<br></span><span style="color: #008080;">147</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">148</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GameWorkSheetPostT&nbsp;post;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">邮寄</span><span style="color: #008000;"><br></span><span style="color: #008080;">149</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GameWorkSheetAccountAuditT&nbsp;audit;<br></span><span style="color: #008080;">150</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GameWorkSheetVerifyT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verify;<br></span><span style="color: #008080;">151</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">152</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">153</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;GameTaskResultT{<br></span><span style="color: #008080;">154</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">任务编号</span><span style="color: #008000;"><br></span><span style="color: #008080;">155</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;no;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">单号&nbsp;(冗余)</span><span style="color: #008000;"><br></span><span style="color: #008080;">156</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;gameId;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">游戏编号(冗余)</span><span style="color: #008000;"><br></span><span style="color: #008080;">157</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;result;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">处理结果</span><span style="color: #008000;"><br></span><span style="color: #008080;">158</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;errmsg;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">提示信息&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">159</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">};<br></span><span style="color: #008080;">160</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">161</span>&nbsp;<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>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;IGameHost&nbsp;extends&nbsp;IService,ILogger,ISecure{&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">163</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GameTaskletT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getTask();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">获取任务</span><span style="color: #008000;"><br></span><span style="color: #008080;">164</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;completeTask(GameTaskResultT&nbsp;result);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//<br></span><span style="color: #008080;">165</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">166</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">167</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">168</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">169</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">170</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">171</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">172</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">173</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">174</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">175</span>&nbsp;<span style="color: #000000;"></span></div>
<br><br><img src ="http://www.cppblog.com/socketref/aggbug/128108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-09-30 00:38 <a href="http://www.cppblog.com/socketref/archive/2010/09/30/128108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ice:: 一直不敢用Bidirectional的双向调用</title><link>http://www.cppblog.com/socketref/archive/2009/06/23/88336.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Mon, 22 Jun 2009 19:17:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2009/06/23/88336.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/88336.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2009/06/23/88336.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/88336.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/88336.html</trackback:ping><description><![CDATA[为了解决公共网络与私有网络的穿透问题，Ice提出了在单个tcp连接上的双向传输方式<br>一直以来对于Server端主动发送Rpc请求到Client端的应用我就一直很小心的使用bidirection方式，甚至是彻底不用，<br>因为通过验证发觉要使用bid则必须关闭ACM管理，也就意味着这个tcp连接是个长连接，只有在这个长连接上server才能<br>发起对客户端的rpc调用，但如果连接断了呢，client到server的rpc请求很简单，ice会重新发起连接，但之后的server到client的<br>rpc请求就不行了，这样必须要求client再次初始化bid操作：<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>&nbsp;<span style="color: #000000;">proxy</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ice_getConnection()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">setAdapter(adapter);<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">proxy</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">addClient(ident);</span></div>
这个也太可怕了，Ice是不要求客户直接管理底层的通信连接细节的，所以客户不容易知道是否被重新连接<br>所以这个咚咚我个人觉得是鸡肋，不知大家如何看同<br><br>Limitations<br>Bidirectional connections have certain limitations:<br>&#8226; They can only be configured for connection-oriented transports such as TCP and SSL.<br>1168 Connection Management<br>&#8226; Most proxy factory methods have no effect on a proxy created by a connection&#8217;s<br>createProxy operation. The proxy is bound to an existing connection,<br>therefore the proxy reflects the connection&#8217;s configuration. For example, it is<br>not possible to change the timeout value of such a proxy. Similarly, it is not<br>possible to change the proxy&#8217;s security configuration: if the incoming connection<br>is secure, then the proxy must be secure, and cannot be changed to be<br>insecure. However, it is legal to change between oneway and twoway invocations.<br>&#8226; A connection established from a Glacier2 router to a server is not configured<br>for bidirectional use. Only the connection from a client to the router is bidirectional.<br>However, the client must not attempt to manually configure a bidirectional<br>connection to a router, as this is handled internally by the Ice run time.<br>&#8226; Bidirectional connections are not compatible with active connection management<br>(see Section 37.4).<br><br><img src ="http://www.cppblog.com/socketref/aggbug/88336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2009-06-23 03:17 <a href="http://www.cppblog.com/socketref/archive/2009/06/23/88336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tinyRpc 基于tcp/xml的rpc服务器 [dev...]</title><link>http://www.cppblog.com/socketref/archive/2006/01/02/2352.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sun, 01 Jan 2006 16:52:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2006/01/02/2352.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/2352.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2006/01/02/2352.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/2352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/2352.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参阅 <A href="http://www.xmlrpc.org">www.xmlrpc.org</A>&nbsp;的xmlrpc规范，发现其规格比较简单，网站list top50中xmlrpc的不同语言的实现，研究了xmlrpc-c,sexyRcp,phpRpc等代码，发现其都实现比较复杂，有些只是提供了xmlrpc的语言规格实现，但没有实现网络传输的功能。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于xmlrpc规范的网络传输采用http，一个请求必须创建一次tcp的交互，导致性能上得不到提高，而且只是单向调用等限制，我考虑重新编写xmlrpc的实现，提供xmlrpc-server,简化其操作接口,支持在客户机和服务器之间保持一个tcp连接，持续的进行xmlrpc双向调用.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持语言:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C++ / Python<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计划时间:&nbsp;&nbsp;&nbsp;2005.12.31&nbsp;&nbsp;&nbsp;&nbsp;~ 2006.1.3<BR><BR>2006.1.4&nbsp;&nbsp;&nbsp;&nbsp;完成rpcServer c++版本</P><img src ="http://www.cppblog.com/socketref/aggbug/2352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2006-01-02 00:52 <a href="http://www.cppblog.com/socketref/archive/2006/01/02/2352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>离0.1版本还有一点点</title><link>http://www.cppblog.com/socketref/archive/2005/12/11/1679.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sun, 11 Dec 2005 12:20:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2005/12/11/1679.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/1679.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2005/12/11/1679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/1679.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/1679.html</trackback:ping><description><![CDATA[<P>
<HR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统在闲暇之余慢慢进行，没有写任何设计文档，所有的设计都在脑子里面，对于结构非常清晰，没有合适的合作伙伴，只能慢慢做<IMG height=19 src="http://www.cppblog.com/Emoticons/cry_smile.gif" width=19 border=0><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fas,eserver,febean,code_bean,mplayer基本完成并进行了简单测试，css完成大部分编码，与alice的rpc完成通信，已经能够通过http访问基本的系统功能，通过操作浏览器可以访问前端媒体设备。前端设备只是接入了一个deskCam,用xvid编解码，不过没有关系<IMG height=19 src="http://www.cppblog.com/Emoticons/teeth_smile.gif" width=19 border=0><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天写到了css与alice的xmlrpc通信部分，对于资料查询，录像启动，停止等操作即将加入<BR>可是接下来公司要派遣出差，可能又要耽误了<IMG height=20 src="http://www.cppblog.com/Emoticons/hitwall.gif" width=25 border=0><BR><BR><STRONG><U>近期计划:</U></STRONG><BR>2005.12.12~2005.12.30:<BR>&nbsp;&nbsp;1.完成css录像和存储的剩余编码和调试,提供web接口启动录像,查询录像资料和录像的回放<BR>&nbsp;&nbsp;2.修改mplayer控件,增加本地录像,抓拍,回放工功能,并进一步调试稳定<BR>&nbsp;&nbsp;3.提供简单的web系统,可以进行浏览,控制,回放(不提供其他管理,诸如用户,设备管理)<BR>&nbsp;&nbsp;2006.01.01~2006.01.30<BR>&nbsp;&nbsp;1.整体联测完成&nbsp;<BR>&nbsp;&nbsp;2.增加接入另外一款设备,比如acti或者smartsight<BR>&nbsp;&nbsp;3.所有系统模块入cvs&nbsp;&nbsp;<BR>&nbsp; 4.推出0.1版本<IMG height=19 src="http://www.cppblog.com/Emoticons/coffee.gif" width=19 border=0><BR>&nbsp; </P><img src ="http://www.cppblog.com/socketref/aggbug/1679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2005-12-11 20:20 <a href="http://www.cppblog.com/socketref/archive/2005/12/11/1679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一种持续的xmlrpc实现</title><link>http://www.cppblog.com/socketref/archive/2005/12/02/1481.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Fri, 02 Dec 2005 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2005/12/02/1481.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/1481.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2005/12/02/1481.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/1481.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/1481.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlrpc的标准是xml+http的实现，但是在应用过程中发现基于http的协议必然造成客户机每次rpc调用都要进行连接服务器，导致的开销增大；还有一个问题在于服务端实现method的注册回掉，而不像RMI那样两端都能注册服务方法，如果客户机也要增加回调method的话，也必须起xmlrpc的服务<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlrpc-c-1.03.06&nbsp; <A href="http://xmlrpc-c.sourceforge.net">http://xmlrpc-c.sourceforge.net</A> 一种xmlrpc的c语言的实现，通过观看其代码，发现他选择abyss 作为自己的通信接口来提供http服务，由于是基于http的，如果作为服务通信接口的话就不太理想了，比如两个系统要经常进行双向通信，交互的频率很高的话，会导致这种通信的开销非常大，而且都是单向通信（一般服务端不能主动调用客户端的rcp方法）。由于是单向通信，造成了比如 外部网络无法穿透防火墙连接到内部主机的问题，更谈不上进一步的xmlrpc调用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所以我想基于xmlrpc-c的改造，替换掉abyss这个web服务器的通信接口，提供一种基于tcp的常连接的通信方法，使客户机和服务器都能同时注册自己的回调函数，然后通过两者之间的tcp连接进行传送xmlrp数据包。<BR><BR>
<P align=center><IMG height=144 alt=002.bmp src="http://www.cppblog.com/images/cppblog_com/socketref/002.bmp" width=511 border=0></P><img src ="http://www.cppblog.com/socketref/aggbug/1481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2005-12-02 09:26 <a href="http://www.cppblog.com/socketref/archive/2005/12/02/1481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>