Multicast(IList<Player> clients, bool reliable, byte cmd, string func, params object[] pars)

    /// <summary>
    /// 网络多播, 发送数据到clients集合的客户端
    /// </summary>
    /// <param name="clients">客户端集合</param>
    /// <param name="reliable">使用可靠传输?</param>
    /// <param name="cmd">网络命令</param>
    /// <param name="func">本地客户端rpc函数</param>
    /// <param name="pars">本地客户端rpc参数</param>
    public virtual void Multicast(IList<Player> clients, bool reliable, byte cmd, string func, params object[] pars)
    {
        byte[] buffer = OnSerializeRpc(new RPCModel(1, func, pars));
        if (buffer.Length / MTU > ushort.MaxValue)
        {
            Debug.LogError("数据太大,请分块发送!");
            return;
        }
        for (int i = 0; i < clients.Count; i++)
        {
            var client = clients[i];
            if (client == null)
                continue;
            if (client.CloseSend)
                continue;
            if (!reliable)
            {
                if (client.udpRPCModels.Count >= ushort.MaxValue)
                {
                    Debug.LogError($"[{client.UserID}]数据缓存列表超出限制!");
                    return;
                }
                client.udpRPCModels.Enqueue(new RPCModel(cmd, buffer, true, false));
            }
            else
            {
                if (client.tcpRPCModels.Count >= ushort.MaxValue)
                {
                    Debug.LogError($"[{client.UserID}]数据缓存列表超出限制!");
                    return;
                }
                client.tcpRPCModels.Enqueue(new RPCModel(cmd, buffer, true, false));
            }
        }
    }

最后更新于

这有帮助吗?