smart-interactive-display/Assets/GadGame/Scripts/Network/DataReceiver.cs

79 lines
2.3 KiB
C#
Raw Normal View History

2024-04-11 01:55:35 -07:00
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
{
2024-04-15 04:10:00 -07:00
public class DataReceiver : PersistentSingleton<DataReceiver>
2024-04-11 01:55:35 -07:00
{
[SerializeField] private int _port = 3000;
[SerializeField] private ReceiverData _dataReceived;
2024-04-11 03:05:59 -07:00
2024-04-11 01:55:35 -07:00
private bool _receiving = true;
public ReceiverData DataReceived => _dataReceived;
private Thread _receiveThread;
private TcpListener _listener;
2024-04-11 03:05:59 -07:00
2024-04-11 01:55:35 -07:00
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
2024-04-11 03:05:59 -07:00
{
2024-04-11 01:55:35 -07:00
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);
2024-04-11 03:05:59 -07:00
_dataReceived = JsonConvert.DeserializeObject<ReceiverData>(jsonData, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
});
2024-04-11 01:55:35 -07:00
}
catch (Exception e)
{
Debug.Log(e);
throw;
}
}
}
2024-04-11 03:05:59 -07:00
2024-04-11 01:55:35 -07:00
void OnDestroy()
{
_receiving = false;
if (_listener != null)
{
_listener.Stop();
}
}
}
}