接口更新

This commit is contained in:
CortexCore 2023-06-07 03:26:55 +08:00
parent ddf0f7ada0
commit 93292b1a59
5 changed files with 148 additions and 62 deletions

View File

@ -1,56 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Net;
using Net.Component;
using Object = UnityEngine.Object;
namespace BITKit
{
[Serializable]
public record GDNetSerivceProvider:INetProvider
{
public void ServerRpc(Action<string> action, params object[] pars)
{
SendAllRT(action.Method.Name,pars);
}
public void ServerRpc(Action<object> action, params object[] pars)
{
SendAllRT(action.Method.Name,pars);
}
public void AddRpcHandle(object rpcHandle)
{
}
public void SendRT(int id,string rpcName, params object[] pars)
{
}
public void SendAllRT(string rpcName, params object[] pars)
{
throw new NotImplementedException();
}
public void ServerRpc(Action<Object> action, params object[] pars)
{
SendAllRT(action.Method.Name,pars);
}
public void ClientRpc(Action<Object> action, params object[] pars)
{
throw new NotImplementedException();
}
public void ServerRpc(Action<GameObject> action, params object[] pars)
{
throw new NotImplementedException();
}
public void ClientRpc(Action<GameObject> action, params object[] pars)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,136 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine;
using Net;
using Net.Client;
using Net.Component;
using Net.Share;
namespace BITKit
{
/// <summary>
/// 基于GDNet的网络服务
/// </summary>
[Serializable]
public class GDNetService:INetProvider,INetClient
{
//服务器地址与端口号
[Header(Constant.Header.Settings)]
[SerializeField] private string address;
[SerializeField] private ushort port;
[Header(Constant.Header.Components)]
//绑定GDNet的ClientManager
[SerializeField]
private ClientManager clientManager;
//内部事件系统
private readonly GenericEvent eventSystem = new();
//内部变量
[Header(Constant.Header.InternalVariables)]
//已保存的Rpc对象
private readonly List<object> rpcHandles = new();
//GDNet的网络客户端
private ClientBase client => clientManager.client;
/// <summary>
/// 是否已连接到服务端
/// </summary>
public bool IsConnected => client.Connected;
/// <summary>
/// 连接服务端的延迟
/// </summary>
public int Ping { get; private set; }
//客户端的基本回调
public event Action OnStartConnect;
public event Action OnConnected;
public event Action OnDisconnected;
public event Action OnConnectedFailed;
public void ServerCommand<T>(T command=default)
{
SendRT("CallServerCommand",command);
}
public void RpcClientCommand<T>(T command=default)
{
SendRT("CallRpcClientCommand",command);
}
public void ClientCommand<T>(int id,T command=default)
{
SendRT("CallClientCommand",id,command);
}
public UniTask<T> GetFromServer<T>(string addressablePath = "Internal")
{
throw new NotImplementedException();
}
public UniTask<T> GetFromClient<T>(int id, string addressablePath = "Internal")
{
throw new NotImplementedException();
}
public void AddRpcHandle(object rpcHandle)
{
rpcHandles.Add(rpcHandle);
}
public void AddCommandListener<T>(Action<T> handle)
{
eventSystem.AddListener(handle);
}
public void RemoveCommandListener<T>(Action<T> handle)
{
eventSystem.RemoveListener(handle);
}
public void SendRT(string rpcName, params object[] pars)
{
clientManager.SendRT(rpcName,pars);
}
public void SendTargetRT(int id, string rpcName, params object[] pars)
{
SendRT("CallTargetRT",id,rpcName,pars);
}
public void SendAllRT(string rpcName, params object[] pars)
{
SendRT("CallSendAllRT",rpcName,pars);
}
public async UniTask<bool> Connect(string _address = "localhost", ushort _port = 27014)
{
if (client.Connected) return true;
client.host = _address;
client.port = _port;
foreach (var x in rpcHandles)
{
client.AddRpcHandle(x);
}
OnStartConnect?.Invoke();
if (await client.Connect())
{
OnConnected?.Invoke();
}
OnConnectedFailed?.Invoke();
return false;
}
public void Disconnect()
{
if (IsConnected)
{
client.Close();
OnDisconnected.Invoke();
}
}
private void OnReceiveCommand(object command)
{
eventSystem.Invoke($"{command.GetType().FullName}.{Constant.System.Internal}",command);
}
}
}

View File

@ -4,6 +4,7 @@
* INetServer
* INetClient
*/
using System;
using Cysharp.Threading.Tasks;
namespace BITKit
{
@ -24,19 +25,21 @@ namespace BITKit
/// <summary>
/// 向服务端发送指令
/// </summary>
/// <typeparam name="T"></typeparam>
void ServerCommand<T>();
/// <typeparam name="T">远程指令类型</typeparam>
void ServerCommand<T>(T command=default);
/// <summary>
/// 向所有客户端发送指令
/// </summary>
/// <typeparam name="T">远程指令类型</typeparam>
void RpcClientCommand<T>();
void RpcClientCommand<T>(T command=default);
/// <summary>
/// 向单个客户端发送指令
/// </summary>
/// <param name="id">客户端ID</param>
/// <param name="command">指令实例</param>
/// <typeparam name="T">远程指令类型</typeparam>
void ClientCommand<T>(int id);
void ClientCommand<T>(int id,T command);
/// <summary>
/// 从服务端获取数据
/// </summary>
@ -123,6 +126,7 @@ namespace BITKit
public interface INetClient
{
public event Action OnStartConnect;
public event Action OnConnected;
public event Action OnDisconnected;
public event Action OnConnectedFailed;

View File

@ -100,8 +100,10 @@ INetProvider.ClientCommand<MyCommand>(64);
## Deployment 部署方法
#### Unity :直接Build项目
#### Net Core :直接发布项目
#### Unity:
直接Build项目
#### Net Core:
直接发布项目
## Contributing 贡献指南