-
-
Notifications
You must be signed in to change notification settings - Fork 56
Open
Description
Hello,
I want to implement a websocket server in unity with watson websocket. For this I built watson websocket for .Net Standard 2.1 and imported the dll to unity. Starting the websocket seems to work but as soon as I try to connect with a simple javascript client it says non-websocket request.
Server:
public class TuioWatsonServer : MonoBehaviour
{
private readonly WatsonWsServer _server = new();
private readonly List<Guid> _connections = new();
private void Awake()
{
_server.AcceptInvalidCertificates = true;
_server.HttpHandler = HttpHandler;
_server.Logger = Debug.Log;
_server.Start();
}
private void OnEnable()
{
_server.ClientConnected += OnClientConnected;
_server.ClientDisconnected += OnClientDisconnected;
_server.MessageReceived += OnMessageReceived;
}
private void OnDisable()
{
_server.ClientConnected -= OnClientConnected;
_server.ClientDisconnected -= OnClientDisconnected;
_server.MessageReceived -= OnMessageReceived;
}
private void OnClientConnected(object sender, ConnectionEventArgs e)
{
_connections.Add(e.Client.Guid);
Debug.Log($"Client connected: {e.Client}");
}
private void OnClientDisconnected(object sender, DisconnectionEventArgs e)
{
_connections.Remove(e.Client.Guid);
Debug.Log($"Client disconnected: {e.Client}");
}
private void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
Debug.Log($"Message received from {e.Client} -> {Encoding.UTF8.GetString(e.Data)}");
}
static void HttpHandler(HttpListenerContext ctx)
{
HttpListenerRequest req = ctx.Request;
string contents = null;
using (Stream stream = req.InputStream)
{
using (StreamReader readStream = new StreamReader(stream, Encoding.UTF8))
{
contents = readStream.ReadToEnd();
}
}
Debug.Log("Non-websocket request received for: " + req.HttpMethod.ToString() + " " + req.RawUrl);
if (req.Headers != null && req.Headers.Count > 0)
{
Debug.Log("Headers:");
var items = req.Headers.AllKeys.SelectMany(req.Headers.GetValues, (k, v) => new { key = k, value = v });
foreach (var item in items)
{
Debug.Log($" {item.key}: {item.value}");
}
}
if (!String.IsNullOrEmpty(contents))
{
Debug.Log("Request body:");
Debug.Log(contents);
}
}
private void OnDestroy()
{
_server.Dispose();
}
}I tried the test.server project and it worked. So this seems to be a unity related problem. Maybe somebody had similar experiences and found a solution.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
