123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using System;
- using System.Threading.Tasks;
- using Unity.Netcode.Transports.UTP;
- using UnityEngine;
- //客户端数据(发给服务端)
- [Serializable]
- public class ConnectionPayload
- {
- public string ip;
- public string playerId;
- public string playerName;
- //客户端是否Debug版本
- public bool isDebug;
- //是否走视频流
- public bool isVideo;
- //是否需要生成锚点
- public bool needAnchor;
- }
- //在OfflineState中创建
- public class ConnectionMethodIP
- {
- protected ConnectionManager m_ConnectionManager;
- //提供缓存信息(客户端本地缓存,音量等参数)
- readonly ProfileManager m_ProfileManager;
- //玩家数据
- public ConnectionPayload connectionData;
- //IP端口
- private string m_Ipaddress;
- private ushort m_Port;
- public ConnectionMethodIP(ConnectionManager connectionManager,ProfileManager profileManager)
- {
- m_ConnectionManager = connectionManager;
- m_ProfileManager = profileManager;
- connectionData = new ConnectionPayload()
- {
- playerId = GetPlayerId(true),
- playerName = "Null",
- isDebug = Debug.isDebugBuild,
- isVideo = false,
- needAnchor = false,
- };
- }
- public void SetConnectionData(string clientIP, string clientName, bool isVideo, bool needAnchor)
- {
- connectionData.ip = clientIP;
- connectionData.playerName = clientName;
- connectionData.isVideo = isVideo;
- connectionData.needAnchor = needAnchor;
- }
- public void SetIPData(string ip, ushort port)
- {
- m_Ipaddress = ip;
- m_Port = port;
- }
- //设置客户端登录账号信息ConnectionPayload
- protected void SetConnectionPayload()
- {
- //转成Json
- var payload = JsonUtility.ToJson(connectionData);
- //转成字节流(UTF8)
- var payloadBytes = System.Text.Encoding.UTF8.GetBytes(payload);
- //交给NetworkManager.NetworkConfig.ConnectionData
- m_ConnectionManager.NetworkManager.NetworkConfig.ConnectionData = payloadBytes;
- }
- //每个客户端必须独一无二,由客户端本地生成
- protected string GetPlayerId(bool isNew)
- {
- //默认以设备名称作为用户名
- return ClientPrefs.GetGuid(isNew);
- }
- //设置客户端账号。设置服务端的IP、Port
- public async Task SetupClientConnectionAsync()
- {
- //客户端账号
- SetConnectionPayload();
- //服务端IP、端口
- UnityTransport utp = (UnityTransport)m_ConnectionManager.NetworkManager.NetworkConfig.NetworkTransport;
- utp.SetConnectionData(m_Ipaddress, m_Port);
- }
- //设置Host的IP、Port
- public async Task SetupHostConnectionAsync()
- {
- //Host模式也是客户端,也需要设置客户端账号
- SetConnectionPayload();
- //设置服务端监听IP、端口
- UnityTransport utp = (UnityTransport)m_ConnectionManager.NetworkManager.NetworkConfig.NetworkTransport;
- utp.SetConnectionData(m_Ipaddress, m_Port);
- }
- }
|