101 lines
3.0 KiB
C#
101 lines
3.0 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using GadGame.Singleton;
|
|
using Newtonsoft.Json;
|
|
using UnityEngine;
|
|
|
|
namespace GadGame.Network
|
|
{
|
|
public class DataReceiver : PersistentSingleton<DataReceiver>
|
|
{
|
|
[SerializeField] private int _port = 3000;
|
|
[SerializeField] private ReceiverData _dataReceived;
|
|
|
|
private bool _receiving = true;
|
|
public ReceiverData DataReceived => _dataReceived;
|
|
|
|
private Thread _receiveThread;
|
|
private TcpListener _listener;
|
|
|
|
|
|
private void Start()
|
|
{
|
|
try
|
|
{
|
|
_listener = new TcpListener(IPAddress.Any, _port);
|
|
_listener.Start();
|
|
_receiving = true;
|
|
Debug.Log("Listening for data from Python...");
|
|
// Start a new thread to handle incoming data
|
|
Thread receiveThread = new Thread(GetReceiveData)
|
|
{
|
|
IsBackground = true
|
|
};
|
|
receiveThread.Start();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError("Error starting listener: " + e.Message);
|
|
}
|
|
}
|
|
|
|
private void GetReceiveData()
|
|
{
|
|
while (_receiving)
|
|
{
|
|
try
|
|
{
|
|
var client = _listener.AcceptTcpClient();
|
|
var stream = client.GetStream();
|
|
var buffer = new byte[1024];
|
|
var bytesRead = stream.Read(buffer, 0, buffer.Length);
|
|
var jsonData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
|
|
_dataReceived = JsonConvert.DeserializeObject<ReceiverData>(jsonData, new JsonSerializerSettings
|
|
{
|
|
NullValueHandling = NullValueHandling.Ignore,
|
|
MissingMemberHandling = MissingMemberHandling.Ignore
|
|
});
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.Log(e);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SendDataToPython(string data)
|
|
{
|
|
try
|
|
{
|
|
string jsonData = JsonConvert.SerializeObject(data);
|
|
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, _port);
|
|
|
|
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
socket.Connect(endPoint);
|
|
|
|
// Convert string data to bytes
|
|
byte[] byteData = Encoding.UTF8.GetBytes(jsonData);
|
|
|
|
// Send data to Python
|
|
socket.Send(byteData);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError("Error sending data to Python: " + e.Message);
|
|
}
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
_receiving = false;
|
|
if (_listener != null)
|
|
{
|
|
_listener.Stop();
|
|
}
|
|
}
|
|
}
|
|
} |