<pre name="code" class="plain">
今天群里有人问RPC,我也不清楚,但是大致应该就是服务器间的通信吧,下面我来整个例子,来介绍下SCUT实现的方法。用的还是上次的那个例子,因为要用到服务器间通信,那必须得有接口来接受消息吧,所以要先检查配置文件里接受消息的脚本目录对不对,</span>
如图:
那么就需要再工程下创建次目录和响应的脚本,如图:
脚本中我们就测试一个消息接受和返回吧,具体代码:
using System;
using ZyGames.Framework.Game.Service;
using ZyGames.Framework.RPC.IO;
namespace GameServer.Script.CsScript.Remote
{
/// <summary>
/// 测试
/// </summary>
public class Test : RemoteStruct
{
public Test(ActionGetter paramGetter, MessageStructure response)
: base(paramGetter, response)
{
}
protected override bool Check()
{
return true;
}
protected override void TakeRemote()
{
Console.WriteLine("收到消息:"+paramGetter.GetString("name"));
}
protected override void BuildPacket()
{
//返回
response.PushIntoStack("我知道你是王胖胖");
}
}
}
接着创建一个新的控制台项目,把DLL放进去,Program.Cs如下:
using System;
using System.Collections.Generic;
using ZyGames.Framework.Game.Contract;
using ZyGames.Framework.RPC.IO;
namespace example
{
class Program
{
private static Dictionary<string, string> cmdDictionary;
static void Main(string[] args)
{
var httpRemote = RemoteService.CreateHttpProxy("proxy1", "http://127.0.0.1:92/Default.ashx");
RequestParam rp = new RequestParam();
rp.Add("name", "王胖胖");
httpRemote.Call("test", rp, result =>
{
var reader = new MessageStructure(result.Message as byte[]);
var msg = reader.ReadString();
Console.WriteLine("返回:"+msg);
});
Console.ReadKey();
}
}
}
配置App.config,增加
<add key="Product.SignKey" value="XXX" />
xxx必须服务端定义的一样才可以解析
接着把服务端打开,然后把控制台也启动,如图,控制台发送了名字,服务器响应了。