使用方法简介:
下载及源码: 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