AnimalSimulation/Assets/Scripts/TouchClient.cs

113 lines
2.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
public class TouchClient : MonoBehaviour
{
private TcpClient client;
private NetworkStream stream;
private bool isConnected = false;
private UdpClient udpListener;
private Thread udpThread;
public Transform background;
private string currentPage = "首页";
void Start()
{
Screen.SetResolution(1920, 1080, false);
udpListener = new UdpClient(9999);
udpThread = new Thread(ListenForBroadcast);
udpThread.Start();
Debug.Log("触摸端等待显示端广播...");
ShowPage("首页");
}
private void ListenForBroadcast()
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 9999);
while (!isConnected)
{
byte[] data = udpListener.Receive(ref endPoint);
string serverIp = Encoding.UTF8.GetString(data);
Debug.Log("发现显示端IP: " + serverIp);
ConnectToServer(serverIp, 8888);
}
}
private void ConnectToServer(string ip, int port)
{
try
{
client = new TcpClient();
client.Connect(ip, port);
stream = client.GetStream();
isConnected = true;
Debug.Log("触摸端已连接到显示端: " + ip);
}
catch
{
Debug.Log("连接显示端失败");
}
}
private void SendMessageToServer(string msg)
{
if (isConnected && stream != null)
{
byte[] data = Encoding.UTF8.GetBytes(msg);
stream.Write(data, 0, data.Length);
Debug.Log("发送指令: " + msg);
}
}
public void OnButtonClick_Page(string pageName)
{
ShowPage(pageName);
SendMessageToServer("Page:" + pageName);
}
public void OnButtonClick_PlayModel(string modelName)
{
SendMessageToServer("Model:" + modelName);
}
public void OnButtonClick_Anim(string animName)
{
SendMessageToServer("Anim:" + animName);
}
// Slider 绑定的方法
public void OnSliderChanged(Slider slider)
{
float progress = slider.value; // 0-100
SendMessageToServer("Progress:" + progress.ToString("F2"));
}
private void ShowPage(string pageName)
{
foreach (Transform child in background)
{
child.gameObject.SetActive(child.name == pageName);
}
currentPage = pageName;
Debug.Log($"切换到页面:{pageName}");
}
private void OnApplicationQuit()
{
udpListener?.Close();
stream?.Close();
client?.Close();
}
}