{"id":513,"date":"2016-06-02T09:32:48","date_gmt":"2016-06-02T09:32:48","guid":{"rendered":"3dc4876f3f08201c7c76cb71fa1da439"},"modified":"2016-06-02T09:32:48","modified_gmt":"2016-06-02T09:32:48","slug":"","status":"publish","type":"post","link":"https:\/\/www.xiaobo.li\/notes\/archives\/513","title":{"rendered":"adf.cs"},"content":{"rendered":"<p>\u4f7f\u7528\u65b9\u6cd5\u7b80\u4ecb\uff1a<\/p>\n<p>&nbsp;&nbsp;&nbsp; \u4e0b\u8f7d\u53ca\u6e90\u7801\uff1a <a target=\"_blank\" href=\"http:\/\/www.aooshi.org\/adf\">http:\/\/www.aooshi.org\/adf<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u9879\u76ee\u6dfb\u52a0\u5f15\u7528\uff1a<\/p>\n<p>Adf.dll<\/p>\n<p>Adf.Cs.dll<\/p>\n<p>protobuf-net.dll <\/p>\n<p>\u4e09\u4e2a\u7a0b\u5e8f\u96c6<\/p>\n<p>&nbsp;<\/p>\n<p>\u521b\u5efa\u901a\u4fe1\u63a5\u53e3\uff0c\u793a\u4f8b\uff1a<\/p>\n<p><span style=\"color:#ff9900;\">\u6ce8\uff1a \u4e0d\u80fd\u542b\u6709\u6cdb\u578b\u6210\u5458\uff0c\u4e0d\u80fd\u662f\u5d4c\u5957\u7c7b\u578b(\u7c7b\u4e2d\u7c7b)<\/span><\/p>\n<\/p>\n<pre class=\"brush:c#; toolbar: true; auto-links: true;\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u4e1a\u52a1\u63a5\u53e3\r\n\/\/\/ &lt;\/summary&gt;\r\npublic interface ITest\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u544a\u77e5\u670d\u52a1\u5668\u5ba2\u6237\u7aef\u65f6\u95f4\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"time\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    bool NotifyTime(DateTime time);\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u8fd4\u56de\u4e00\u4e2a\u6307\u5b9aSIZE\u7684\u6570\u7ec4\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"size\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    int[] GetArray(int size);\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u83b7\u53d6\u4e00\u4e2a\u5206\u9875\u6570\u636e\uff0c\u5e76\u6307\u5b9apageindex,pagesize\u53c2\u6570\u505a\u4e3ahash\u952e\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"pageindex\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"pagesize\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"totalcount\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    [ClientHashKey(\"pageindex\", \"pagesize\")]\r\n    int[] GetDatas(int pageindex,int pagesize, out int totalcount);\r\n}<\/pre>\n<\/p>\n<p>&nbsp;<\/p>\n<p>\u521b\u5efa\u670d\u52a1\u7aef\u4e1a\u52a1\uff0c\u4ee5\u5b9e\u4f8b\u63a5\u53e3,\u793a\u4f8b\uff1a<\/p>\n<\/p>\n<pre class=\"brush:c#; toolbar: true; auto-links: true;\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u670d\u52a1\u7aef\u793a\u4f8b\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class TestServer : Adf.Cs.Example.ITest\r\n{\r\n    \/\/\u6ce8\u610f\uff1a \u4e3a\u4e86\u5b89\u5168\uff0c\u7528\u4e8eCS\u7684\u65b9\u6cd5\u5fc5\u9700\u6807\u8bb0Command\uff0c\u4e0d\u6807\u8bb0\u7684\u4e3a\u672c\u5730\u65b9\u6cd5\u3002 \r\n    \/\/\u4e0d\u6807\u8bb0\u7684\u60c5\u51b5\u4e0b\u5ba2\u6237\u7aef\u8bf7\u6c42\u5c06\u4f1a\u51fa\u73b0\u627e\u4e0d\u5230\u547d\u4ee4\u7684\u5f02\u5e38\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u544a\u77e5\u6211\u5ba2\u6237\u7aef\u65f6\u95f4\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"time\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public bool NotifyTime(DateTime time)\r\n    {\r\n        \/\/\u6536\u5230\u65f6\u95f4\u4e86\uff0c\u8fd4\u56de true\r\n        return true;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u8fd4\u56de\u6307\u5b9a\u5927\u5c0f\u7684\u4e00\u7ec4\u6570\u636e\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"size\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public int[] GetArray(int size)\r\n    {\r\n        var rand = new Random();\r\n        var result = new int[ size ];\r\n        for (int i = 0; i &lt; size; i++)\r\n        {\r\n            \/\/\u968f\u673a\u751f\u6210\u4e00\u4e2a\u6570\r\n            result[i] = rand.Next();\r\n        }\r\n        return result;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u8fd4\u56de\u4e00\u4e2a\u5206\u9875\u6570\u636e\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"pageindex\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"pagesize\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"totalcount\"&gt;&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public int[] GetDatas(int pageindex, int pagesize, out int totalcount)\r\n    {\r\n        \/\/\u56e0\u4e3a\u662f\u793a\u4f8b\uff0c\u6b64\u5904\u4e1a\u52a1\u4e0d\u5b8c\u6574\uff0c \u76f4\u63a5\u8fd4\u56de\u6307\u5b9a\u5c3a\u5bf8\u6570\u636e\r\n        totalcount = int.MaxValue;\r\n        return this.GetArray(pagesize);\r\n    }\r\n}    <\/pre>\n<p>\u670d\u52a1\u7aef\u542f\u52a8\u914d\u7f6e\uff0c\u793a\u4f8b<\/p>\n<\/p>\n<pre class=\"brush:c#; toolbar: true; auto-links: true;\">            var logManager = new Adf.LogManager(\"test\");\r\n            var listen = new Adf.Cs.ServerListen(logManager);<\/pre>\n<\/p>\n<p>\u670d\u52a1\u7aef\u9700\u8981\u7684\u914d\u7f6e\uff0c\u793a\u4f8b<\/p>\n<\/p>\n<pre class=\"brush:xml; toolbar: true; auto-links: true;\">&lt;configSections&gt;\r\n    &lt;section name=\"ServerMap\" type=\"System.Configuration.NameValueSectionHandler\"\/&gt;\r\n  &lt;\/configSections&gt;\r\n  &lt;!-- \u670d\u52a1\u6620\u5c04 --&gt;\r\n  &lt;ServerMap&gt;\r\n    &lt;!-- \u5ba2\u6237\u7aefTest\u6620\u5c04\u5230 Adf.Cs.ExampleServer \u7a0b\u5e8f\u96c6\u7684 Adf.Cs.ExampleServer.TestServer \u7c7b --&gt;\r\n    &lt;add key=\"Test\" value=\"Adf.Cs.ExampleServer.TestServer,Adf.Cs.ExampleServer\"\/&gt;\r\n  &lt;\/ServerMap&gt;\r\n  &lt;appSettings&gt;\r\n    &lt;!-- \u670d\u52a1\u7aef\u53e3 --&gt;\r\n    &lt;add key=\"Port\" value=\"4562\"\/&gt;\r\n    &lt;!-- \u65e5\u5fd7\u5b58\u50a8\u8def\u5f84 --&gt;\r\n    &lt;add key=\"Log:Path\" value=\"D:\\logs\\Adf.Cs\\TestServer\"\/&gt;\r\n    &lt;!-- \u65e5\u5fd7\u5237\u65b0\u65f6\u95f4\u95f4\u9694(\u79d2) --&gt;\r\n    &lt;add key=\"Log:FlushInterval\" value=\"10\"\/&gt;\r\n\r\n  &lt;\/appSettings&gt;<\/pre>\n<\/p>\n<p>\u521b\u5efa\u5ba2\u6237\u7aef\uff0c\u793a\u4f8b\uff1a<\/p>\n<\/p>\n<pre class=\"brush:c#; toolbar: true; auto-links: true;\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u6d4b\u8bd5\u5ba2\u6237\u7aef\r\n\/\/\/ &lt;\/summary&gt;\r\npublic static class TestClient\r\n{\r\n    \/\/\u6307\u793a\u670d\u52a1\u540d\u4e3a\uff1a           Test\r\n    \/\/\u670d\u52a1\u5668\u4e3a\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\uff1a   TestServer \u8282\u70b9\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u901a\u7528\u5b9e\u4f8b\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static ITest Instance = Adf.Cs.CsHelper.GetClient&lt;ITest&gt;(\"Test\", \"TestServer\");\r\n\r\n\r\n}<\/pre>\n<\/p>\n<p>\u4f7f\u7528\u793a\u4f8b\uff1a<\/p>\n<\/p>\n<pre class=\"brush:c#; toolbar: true; auto-links: true;\"> var notifyResult = TestClient.Instance.NotifyTime(DateTime.Now);\r\nConsole.WriteLine(\"\u544a\u8bc9\u670d\u52a1\u5668\u5ba2\u6237\u7aef\u65f6\u95f4:\" + notifyResult);\r\n\r\nvar array = TestClient.Instance.GetArray(5);\r\nConsole.WriteLine(\"\u4ece\u670d\u52a1\u5668\u83b7\u53d6\u5230\u6570\u636e:\" + Adf.ConvertHelper.ArrayToString(array, \",\"));\r\n\r\nvar totalcount = 0;\r\nvar datas = TestClient.Instance.GetDatas(1, 10, out totalcount);\r\nConsole.WriteLine(\"\u4ece\u670d\u52a1\u5668\u83b7\u53d6\u7b2c1\u9875\u6570\u636e:\" + totalcount + Adf.ConvertHelper.ArrayToString(datas, \",\"));\r\nConsole.WriteLine(\"\u6570\u636e\u5728\u670d\u52a1\u5668\u7684\u603b\u91cf\u4e3a:\"+ totalcount);<\/pre>\n<\/p>\n<p>\u5ba2\u6237\u7aef\u9700\u8981\u7684\u914d\u7f6e\uff1a<\/p>\n<\/p>\n<pre class=\"brush:xml; toolbar: true; auto-links: true;\">  &lt;configSections&gt;\r\n    &lt;section name=\"TestServer\" type=\"Adf.Config.IpGroupSection,Adf\"\/&gt;\r\n  &lt;\/configSections&gt;\r\n  &lt;appSettings&gt;\r\n    &lt;!-- \u65e5\u5fd7\u5b58\u50a8\u8def\u5f84 --&gt;\r\n    &lt;add key=\"Log:Path\" value=\"C:\\Logs\\Adf.Cs\\TestClient\"\/&gt;\r\n    &lt;!-- \u65e5\u5fd7\u5237\u65b0\u65f6\u95f4\u95f4\u9694(\u79d2) --&gt;\r\n    &lt;add key=\"Log:FlushInterval\" value=\"10\"\/&gt;\r\n  &lt;\/appSettings&gt;\r\n  &lt;!-- Servers \u6307\u5b9a\uff0c \u5f53\u524d\u4ec5\u5f00\u653e\u4e00\u4e2a\u670d\u52a1 --&gt;\r\n  &lt;TestServer hash=\"0\"&gt;\r\n    &lt;add ip=\"127.0.0.1\" port=\"4562\"\/&gt;\r\n  &lt;\/TestServer&gt;<\/pre>\n<\/p>\n<p>&nbsp;<\/p>\n<p><\/p>\n<p>\u793a\u4f8b\u9879\u76ee\u4e0b\u8f7d\uff1a<\/p>\n<p>&nbsp; <a href=\"http:\/\/www.aooshi.org\/adf\/download\/Adf.Cs.1.x.Example.zip\">http:\/\/www.aooshi.org\/adf\/download\/Adf.Cs.1.x.Example.zip<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528\u65b9\u6cd5\u7b80\u4ecb\uff1a<\/p>\n<p>&nbsp;&nbsp;&nbsp; \u4e0b\u8f7d\u53ca\u6e90\u7801\uff1a http:\/\/www.aooshi.org\/adf<\/p>\n<p>&nbsp;<\/p>\n<p>\u9879\u76ee\u6dfb\u52a0\u5f15\u7528\uff1a<\/p>\n<p>Adf.dll<\/p>\n<p>Adf.Cs.dll<\/p>\n<p>protobuf-net.dll <\/p>\n<p>\u4e09\u4e2a\u7a0b\u5e8f\u96c6<\/p>\n<p>&nbsp;<\/p>\n<p><\/p>\n<p> <a href=\"https:\/\/www.xiaobo.li\/notes\/archives\/513\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[274],"tags":[149],"class_list":["post-513","post","type-post","status-publish","format-standard","hentry","category-adf","tag-adfcs"],"_links":{"self":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/comments?post=513"}],"version-history":[{"count":0,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/513\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/media?parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/categories?post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/tags?post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}