定义服务

服务器端中新建一个类,继承于ServerProvider类(或实现IServerProvider),然后在该类中写公共方法,并用JsonRpc属性标签标记,如果方法有重载,需要重新指定函数键

  • 支持代理生成注释

    1. public class Server : ServerProvider
    2. {
    3. [JsonRpc]
    4. public string TestJsonRpc(string str)
    5. {
    6. return "RRQM" + str;
    7. }
    8. [JsonRpc]
    9. public JObject TestJObject(JObject obj)
    10. {
    11. return obj;
    12. }
    13. }

    创建服务解析器

    服务解析器是实际的服务接收、触发、调用、反馈的实际载体,通俗来说就是通信服务器

【Tcp协议解析器】
JsonRpcParserPlugin插件添加在TcpService服务器时,会使用TCP协议。此时调用端必须以\r\n结尾。

  1. static IRpcParser CreateTcpJsonRpcParser()
  2. {
  3. TcpService service = new TcpService();
  4. service.Connecting += (client, e) =>
  5. {
  6. client.SetDataHandlingAdapter(new TerminatorPackageAdapter("\r\n"));
  7. };
  8. service.Setup(new RRQMConfig()
  9. .UsePlugin()
  10. .SetListenIPHosts(new IPHost[] { new IPHost(7705) }))
  11. .Start();
  12. return service.AddPlugin<JsonRpcParserPlugin>();
  13. }

【Http解析器】
JsonRpcParserPlugin插件添加在HttpService服务器时,会使用Http协议。

  1. static IRpcParser CreateHTTPJsonRpcParser()
  2. {
  3. HttpService service = new HttpService();
  4. service.Setup(new RRQMConfig().UsePlugin()
  5. .SetListenIPHosts(new IPHost[] { new IPHost(7706) }))
  6. .Start();
  7. return service.AddPlugin<JsonRpcParserPlugin>()
  8. .SetJsonRpcUrl("/jsonRpc");
  9. }

注册、发布服务

添加解析器(添加时需要以键、值方式添加,方便后续查找),然后注册服务即可。

  1. static void Main(string[] args)
  2. {
  3. RpcStore rpcStore = new RpcStore();
  4. //添加解析器,解析器根据传输协议,序列化方式的不同,调用RPC服务
  5. rpcStore.AddRpcParser("tcpJsonRpcParser ", CreateTcpJsonRpcParser());
  6. rpcStore.AddRpcParser("httpJsonRpcParser ", CreateHTTPJsonRpcParser());
  7. //注册当前程序集的所有服务
  8. rpcStore.RegisterAllServer();
  9. //分享代理,代理文件可通过RRQMTool远程获取。
  10. //rpcService.ShareProxy(new IPHost(8848));
  11. //或者直接本地导出代理文件。
  12. //ServerCellCode[] cellCodes = rpcStore.GetProxyInfo(typeof(JsonRpcAttribute));//当想导出全部时,RpcStore.ProxyAttributeMap.Values.ToArray()
  13. //string codeString = CodeGenerator.ConvertToCode("RRQMProxy", cellCodes);
  14. JsonRpcClientInvokeByTcp();
  15. JsonRpcClientInvokeByHttp();
  16. Console.ReadKey();
  17. }