119 lines
2.1 KiB
C#
119 lines
2.1 KiB
C#
using UnityEngine;
|
|
|
|
namespace uOSC
|
|
{
|
|
|
|
public class uOscServer : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
public int port = 3333;
|
|
|
|
[SerializeField]
|
|
public bool autoStart = true;
|
|
|
|
#if NETFX_CORE
|
|
Udp udp_ = new Uwp.Udp();
|
|
Thread thread_ = new Uwp.Thread();
|
|
#else
|
|
Udp udp_ = new DotNet.Udp();
|
|
Thread thread_ = new DotNet.Thread();
|
|
#endif
|
|
Parser parser_ = new Parser();
|
|
|
|
public DataReceiveEvent onDataReceived = new DataReceiveEvent();
|
|
public ServerStartEvent onServerStarted = new ServerStartEvent();
|
|
public ServerStopEvent onServerStopped = new ServerStopEvent();
|
|
|
|
#if UNITY_EDITOR
|
|
public DataReceiveEvent _onDataReceivedEditor = new DataReceiveEvent();
|
|
#endif
|
|
|
|
int port_ = 0;
|
|
bool isStarted_ = false;
|
|
|
|
public bool isRunning
|
|
{
|
|
get { return udp_.isRunning; }
|
|
}
|
|
|
|
void Awake()
|
|
{
|
|
port_ = port;
|
|
}
|
|
|
|
void OnEnable()
|
|
{
|
|
if (autoStart)
|
|
{
|
|
StartServer();
|
|
}
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
StopServer();
|
|
}
|
|
|
|
public void StartServer()
|
|
{
|
|
if (isStarted_) return;
|
|
|
|
udp_.StartServer(port);
|
|
thread_.Start(UpdateMessage);
|
|
|
|
isStarted_ = true;
|
|
|
|
onServerStarted.Invoke(port);
|
|
}
|
|
|
|
public void StopServer()
|
|
{
|
|
if (!isStarted_) return;
|
|
|
|
thread_.Stop();
|
|
udp_.Stop();
|
|
|
|
isStarted_ = false;
|
|
|
|
onServerStopped.Invoke(port);
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
UpdateReceive();
|
|
UpdateChangePort();
|
|
}
|
|
|
|
void UpdateReceive()
|
|
{
|
|
while (parser_.messageCount > 0)
|
|
{
|
|
var message = parser_.Dequeue();
|
|
onDataReceived.Invoke(message);
|
|
#if UNITY_EDITOR
|
|
_onDataReceivedEditor.Invoke(message);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void UpdateChangePort()
|
|
{
|
|
if (port_ == port) return;
|
|
|
|
StopServer();
|
|
StartServer();
|
|
port_ = port;
|
|
}
|
|
|
|
void UpdateMessage()
|
|
{
|
|
while (udp_.messageCount > 0)
|
|
{
|
|
var buf = udp_.Receive();
|
|
int pos = 0;
|
|
parser_.Parse(buf, ref pos, buf.Length);
|
|
}
|
|
}
|
|
}
|
|
|
|
} |