1
This commit is contained in:
17
Assets/BITKit/Unity/Scripts/Net/Http/BITKit.Net.Http.asmdef
Normal file
17
Assets/BITKit/Unity/Scripts/Net/Http/BITKit.Net.Http.asmdef
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "BITKit.Net.Http",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:14fe60d984bf9f84eac55c6ea033a8f4",
|
||||
"GUID:709caf8d7fb6ef24bbba0ab9962a3ad0"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
@@ -0,0 +1,51 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using BITKit.Entities;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit.Net.Http
|
||||
{
|
||||
[CustomType(typeof(IHttpListenerService))]
|
||||
public class UnityBasedHttpListenerService : MonoBehaviour,IHttpListenerService
|
||||
{
|
||||
[SerializeField] private int port = 8080;
|
||||
[SerializeField] private bool autoStart = true;
|
||||
|
||||
private readonly IHttpListenerService _service = new HttpListenerService();
|
||||
public bool IsListening => _service.IsListening;
|
||||
|
||||
public int Port
|
||||
{
|
||||
get => _service.Port;
|
||||
set => _service.Port = port = value;
|
||||
}
|
||||
|
||||
public event Func<HttpListenerRequest, HttpContent> OnRequest
|
||||
{
|
||||
add => _service.OnRequest += value;
|
||||
remove => _service.OnRequest -= value;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (!autoStart) return;
|
||||
_service.Port = port;
|
||||
_service.Start();
|
||||
destroyCancellationToken.Register(_service.Stop);
|
||||
}
|
||||
|
||||
void IHttpListenerService.Start()
|
||||
{
|
||||
_service.Port = port;
|
||||
_service.Start();
|
||||
}
|
||||
void IHttpListenerService.Stop()
|
||||
{
|
||||
_service.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
106
Assets/BITKit/Unity/Scripts/Net/LAN/UnityBasedLanBroadcaster.cs
Normal file
106
Assets/BITKit/Unity/Scripts/Net/LAN/UnityBasedLanBroadcaster.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace BITKit.Net.LAN
|
||||
{
|
||||
public class UnityBasedLanBroadcaster : MonoBehaviour,ILANBroadcaster
|
||||
{
|
||||
[SerializeField] private int port;
|
||||
[SerializeField] private bool broadcastOnStart = true;
|
||||
[SerializeField] private bool listenOnStart = true;
|
||||
[SerializeField] private bool log = true;
|
||||
|
||||
[SerializeField] private UnityEvent<EndPoint, byte[]> onReceive;
|
||||
[SerializeField] private UnityEvent<string> OnReceiveAsEndPoint;
|
||||
|
||||
|
||||
private readonly ILANBroadcaster _service = new UdpBasedLanBroadcaster();
|
||||
|
||||
private CancellationToken _cancellationToken;
|
||||
|
||||
public int Port
|
||||
{
|
||||
get => port;
|
||||
set => port = _service.Port = value;
|
||||
}
|
||||
|
||||
public byte[] Buffer
|
||||
{
|
||||
get => _service.Buffer;
|
||||
set => _service.Buffer = value;
|
||||
}
|
||||
|
||||
public event Action<EndPoint, byte[]> OnReceive
|
||||
{
|
||||
add => _service.OnReceive += value;
|
||||
remove => _service.OnReceive -= value;
|
||||
}
|
||||
private void Start()
|
||||
{
|
||||
_cancellationToken = gameObject.GetCancellationTokenOnDestroy();
|
||||
OnReceive += OnReceiveData;
|
||||
_service.Port = port;
|
||||
if(broadcastOnStart)
|
||||
StartBroadcast();
|
||||
if(listenOnStart)
|
||||
StartListen();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
StopBroadcast();
|
||||
StopListen();
|
||||
}
|
||||
|
||||
public void StartBroadcast()
|
||||
{
|
||||
_service.StartBroadcast();
|
||||
}
|
||||
|
||||
public void StopBroadcast()
|
||||
{
|
||||
_service.StopBroadcast();
|
||||
}
|
||||
|
||||
public void StartListen()
|
||||
{
|
||||
_service.StartListen();
|
||||
}
|
||||
|
||||
public void StopListen()
|
||||
{
|
||||
_service.StopListen();
|
||||
}
|
||||
private async void OnReceiveData(EndPoint endPoint, byte[] message)
|
||||
{
|
||||
try
|
||||
{
|
||||
await UniTask.SwitchToMainThread(_cancellationToken);
|
||||
onReceive?.Invoke(endPoint,message);
|
||||
OnReceiveAsEndPoint?.Invoke(endPoint.ToString());
|
||||
if (log)
|
||||
{
|
||||
BIT4Log.Log<ILANBroadcaster>($"Receive from {endPoint}\nMessage:{message}");
|
||||
}
|
||||
}
|
||||
catch(OperationCanceledException){}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_service?.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user