adf.cs

使用方法简介:

    下载及源码: http://www.aooshi.org/adf

 

项目添加引用:

Adf.dll

Adf.Cs.dll

protobuf-net.dll

三个程序集

 

创建通信接口,示例:

注: 不能含有泛型成员,不能是嵌套类型(类中类)

/// <summary>
/// 业务接口
/// </summary>
public interface ITest
{
    /// <summary>
    /// 告知服务器客户端时间
    /// </summary>
    /// <param name="time"></param>
    /// <returns></returns>
    bool NotifyTime(DateTime time);

    /// <summary>
    /// 返回一个指定SIZE的数组
    /// </summary>
    /// <param name="size"></param>
    /// <returns></returns>
    int[] GetArray(int size);

    /// <summary>
    /// 获取一个分页数据,并指定pageindex,pagesize参数做为hash键
    /// </summary>
    /// <param name="pageindex"></param>
    /// <param name="pagesize"></param>
    /// <param name="totalcount"></param>
    /// <returns></returns>
    [ClientHashKey("pageindex", "pagesize")]
    int[] GetDatas(int pageindex,int pagesize, out int totalcount);
}

 

创建服务端业务,以实例接口,示例:

/// <summary>
/// 服务端示例
/// </summary>
public class TestServer : Adf.Cs.Example.ITest
{
    //注意: 为了安全,用于CS的方法必需标记Command,不标记的为本地方法。 
    //不标记的情况下客户端请求将会出现找不到命令的异常

    /// <summary>
    /// 告知我客户端时间
    /// </summary>
    /// <param name="time"></param>
    /// <returns></returns>
    public bool NotifyTime(DateTime time)
    {
        //收到时间了,返回 true
        return true;
    }

    /// <summary>
    /// 返回指定大小的一组数据
    /// </summary>
    /// <param name="size"></param>
    /// <returns></returns>
    public int[] GetArray(int size)
    {
        var rand = new Random();
        var result = new int[ size ];
        for (int i = 0; i < size; i++)
        {
            //随机生成一个数
            result[i] = rand.Next();
        }
        return result;
    }

    /// <summary>
    /// 返回一个分页数据
    /// </summary>
    /// <param name="pageindex"></param>
    /// <param name="pagesize"></param>
    /// <param name="totalcount"></param>
    /// <returns></returns>
    public int[] GetDatas(int pageindex, int pagesize, out int totalcount)
    {
        //因为是示例,此处业务不完整, 直接返回指定尺寸数据
        totalcount = int.MaxValue;
        return this.GetArray(pagesize);
    }
}    

服务端启动配置,示例

            var logManager = new Adf.LogManager("test");
            var listen = new Adf.Cs.ServerListen(logManager);

服务端需要的配置,示例

<configSections>
    <section name="ServerMap" type="System.Configuration.NameValueSectionHandler"/>
  </configSections>
  <!-- 服务映射 -->
  <ServerMap>
    <!-- 客户端Test映射到 Adf.Cs.ExampleServer 程序集的 Adf.Cs.ExampleServer.TestServer 类 -->
    <add key="Test" value="Adf.Cs.ExampleServer.TestServer,Adf.Cs.ExampleServer"/>
  </ServerMap>
  <appSettings>
    <!-- 服务端口 -->
    <add key="Port" value="4562"/>
    <!-- 日志存储路径 -->
    <add key="Log:Path" value="D:\logs\Adf.Cs\TestServer"/>
    <!-- 日志刷新时间间隔(秒) -->
    <add key="Log:FlushInterval" value="10"/>

  </appSettings>

创建客户端,示例:

/// <summary>
/// 测试客户端
/// </summary>
public static class TestClient
{
    //指示服务名为:           Test
    //服务器为配置文件中的:   TestServer 节点

    /// <summary>
    /// 通用实例
    /// </summary>
    public static ITest Instance = Adf.Cs.CsHelper.GetClient<ITest>("Test", "TestServer");


}

使用示例:

 var notifyResult = TestClient.Instance.NotifyTime(DateTime.Now);
Console.WriteLine("告诉服务器客户端时间:" + notifyResult);

var array = TestClient.Instance.GetArray(5);
Console.WriteLine("从服务器获取到数据:" + Adf.ConvertHelper.ArrayToString(array, ","));

var totalcount = 0;
var datas = TestClient.Instance.GetDatas(1, 10, out totalcount);
Console.WriteLine("从服务器获取第1页数据:" + totalcount + Adf.ConvertHelper.ArrayToString(datas, ","));
Console.WriteLine("数据在服务器的总量为:"+ totalcount);

客户端需要的配置:

  <configSections>
    <section name="TestServer" type="Adf.Config.IpGroupSection,Adf"/>
  </configSections>
  <appSettings>
    <!-- 日志存储路径 -->
    <add key="Log:Path" value="C:\Logs\Adf.Cs\TestClient"/>
    <!-- 日志刷新时间间隔(秒) -->
    <add key="Log:FlushInterval" value="10"/>
  </appSettings>
  <!-- Servers 指定, 当前仅开放一个服务 -->
  <TestServer hash="0">
    <add ip="127.0.0.1" port="4562"/>
  </TestServer>

 

示例项目下载:

  http://www.aooshi.org/adf/download/Adf.Cs.1.x.Example.zip

 

 

此条目发表在adf分类目录,贴了标签。将固定链接加入收藏夹。