代码拉取完成,页面将自动刷新
初始化C#仓库, 在src/repo/目录下执行:
python repo.py -t csharp -i
以example.idl为例,在src/repo/目录下执行:
python repo.py -t csharp -u example
python repo.py -t csharp -b example
将在src/repo/usr/example
目录下生成C# RPC相关文件。
src/repo/usr/csharp/rpc_framework目录下的内容为C#版本的RPC实现。
using UnityEngine;
using kratos;
using rpc;
using System;
public class Network : MonoBehaviour
{
IRpc rpc_ = null; // RPC框架
LoginProxy login_prx_ = null; // Login服务本地代理
// 日志回调接口
class Logger : kratos.ILogger
{
public void Debug(string log)
{
UnityEngine.Debug.Log(log);
}
public void Fail(string log)
{
UnityEngine.Debug.LogError(log);
}
public void Fatal(string log)
{
UnityEngine.Debug.LogError(log);
}
public void Info(string log)
{
UnityEngine.Debug.Log(log);
}
public void Warn(string log)
{
UnityEngine.Debug.LogWarning(log);
}
}
// Start is called before the first frame update
async void Start()
{
// 建立RPC框架
rpc_ = RpcFactory.create();
// 初始化,建立日志
rpc_.Initialize(new Logger());
// 设置自动重连
rpc_.AutoReconnect = true;
// 设置自动重连间隔
rpc_.AutoReconnectIntvalMS = 1000;
// 是否使用Tick来代替真实时间戳,可以减少获取系统时间戳的次数,但是会有一定的误差,但最大误差不超过一帧
rpc_.UseTickAsTimestamp = true;
// 启用协程调用,连接到服务端集群
bool ret = await rpc_.Connect("127.0.0.1", 6888, 2000);
// 调用完成后打印日志
Debug.Log($"Connect result:{ret}");
// 获取一个Login服务的本地代理
login_prx_ = Proxy.GetLogin();
}
// Update is called once per frame
void Update()
{
// 每帧运行RPC框架主循环
rpc_.Update();
}
private async void LateUpdate()
{
if (login_prx_ != null)
{
// 启用协程,每帧调用一次Login::login方法
var id = await login_prx_.login("123", "456");
Debug.Log($"Login result:{id}");
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。