The screen transfer plug-in provides TCP and UDP transfer protocols, so we can use it to realize this function
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text;
public class NetWorkMgr : MonoBehaviour
{
private static NetWorkMgr instance;
public static NetWorkMgr Instance
{
get
{
if (instance == null)
{
GameObject prefab = Resources.Load<GameObject>("ConnectMgr");
GameObject obj = Instantiate(prefab);
instance = obj.GetComponent<NetWorkMgr>();
}
return instance;
}
}
[SerializeField] private LargeFileEncoder largeFileEncoder;
[SerializeField] private LargeFileDecoder largeFileDecoder;
[SerializeField] private string targetIp;
public Action<string> ReceiveString;
/// <summary>
/// 大文件
/// </summary>
public Action<byte[]> ReceiveLargeFile;
public GameObject logUI;
public string TargetIp
{
get
{
return targetIp;
}
set
{
targetIp = value;
}
}
void Awake()
{
//instance = this;
DontDestroyOnLoad(this);
logUI.SetActive(false);
}
void Start()
{
}
void Update()
{
if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.T))
{
if (logUI)
{
logUI.SetActive(!logUI.activeSelf);
}
}
}
/// <summary>
/// 初始化服务端
/// </summary>
public void InitAsServer()
{
FMNetworkManager.instance.Action_InitAsServer();
}
/// <summary>
/// 初始化客户端
/// </summary>
public void InitAsClient()
{
FMNetworkManager.instance.Action_InitAsClient();
}
public void Action_ProcessStringData(string _string)
{
if (FMNetworkManager.instance.NetworkType == FMNetworkType.Server)
{
}
else
{
}
ReceiveString?.Invoke(_string);
}
public void Action_ProcessByteData(byte[] _byte)
{
if (FMNetworkManager.instance.NetworkType == FMNetworkType.Server)
{
}
else
{
}
ReceiveLargeFile?.Invoke(_byte);
}
public void Action_ShowRawByteLength(byte[] _byte)
{
}
/// <summary>
///
/// </summary>
/// <param name="_value"></param>
public void Action_SendByteToAll(int _value)
{
FMNetworkManager.instance.SendToAll(new byte[_value]);
}
public void Action_SendByteToServer(int _value)
{
FMNetworkManager.instance.SendToServer(new byte[_value]);
}
public void Action_SendByteToOthers(int _value)
{
FMNetworkManager.instance.SendToOthers(new byte[_value]);
}
public void Action_SendByteToTarget(int _value)
{
FMNetworkManager.instance.SendToTarget(new byte[_value], targetIp);
}
public void Action_SendTextToAll(string _value)
{
FMNetworkManager.instance.SendToAll(_value);
}
public void Action_SendTextToServer(string _value)
{
FMNetworkManager.instance.SendToServer(_value);
}
public void Action_SendTextToOthers(string _value)
{
FMNetworkManager.instance.SendToOthers(_value);
}
public void Action_SendTextToTarget(string _value)
{
FMNetworkManager.instance.SendToTarget(_value, targetIp);
}
/// <summary>
/// 发送大的数据
/// </summary>
/// <param name="datas"></param>
public void Action_SendLargeFile(byte[] datas)
{
largeFileEncoder.Action_SendLargeByte(datas);
}
public byte[] PackData(int headint, string jsonstr)
{
byte[] head = BitConverter.GetBytes(headint);
byte[] body = Encoding.UTF8.GetBytes(jsonstr);
byte[] data = new byte[head.Length + body.Length];
Buffer.BlockCopy(head, 0, data, 0, head.Length);
Buffer.BlockCopy(body, 0, data, head.Length, body.Length);
return data;
}
/// <summary>
/// 教师返回数据解包
/// </summary>
/// <param name="data"></param>
/// <param name="headint"></param>
/// <returns></returns>
public string UnpackTeacherData(byte[] data, int headint)
{
string jsonstr = string.Empty;
int head = BitConverter.ToInt32(data, 0);
//int head = BitConverter.ToInt32(data, 16);
if (head == headint)
{
jsonstr = Encoding.UTF8.GetString(data, 4, data.Length - 4);
//jsonstr = Encoding.UTF8.GetString(data, 20, data.Length - 20);
}
else
{
Debug.Log("head不相等!!!" + head);
}
return jsonstr;
}
/// <summary>
/// 学生返回数据解包
/// </summary>
/// <param name="data"></param>
/// <param name="headint"></param>
/// <returns></returns>
public string UnpackStudentData(byte[] data, int headint)
{
string jsonstr = string.Empty;
//int head = BitConverter.ToInt32(data, 0);
int head = BitConverter.ToInt32(data, 16);
if (head == headint)
{
//jsonstr = Encoding.UTF8.GetString(data, 4, data.Length - 4);
jsonstr = Encoding.UTF8.GetString(data, 20, data.Length - 20);
}
else
{
Debug.Log("head不相等!!!" + head);
}
return jsonstr;
}
}
Picture 1