This commit is contained in:
CortexCore
2024-11-03 16:42:23 +08:00
commit b125894cc3
5904 changed files with 1070129 additions and 0 deletions

View 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
}

View File

@@ -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();
}
}
}

View 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();
}
}
}