Я хочу использовать библиотеку с поддержкой веб-сокетов для запуска сервера веб-сокетов в приложении UWP. Мне это нужно для одноранговой многопользовательской игры. После того, как я добавил websocket-sharp.dll, при создании приложения возникает ошибка «Не удается найти тип System.ComponentModel.Win32Exception в модуле System.dll».
Я пытался установить различные пакеты NugetPackages, такие как System.ComponentModel иNetStandart.Library
Я не могу показать конкретный код, потому что в ошибке нет строки, в которую он был брошен. Я использовал эту часть острой паутины. Метод в MainPage.xaml.cs:
var httpsv = new HttpServer(4649);
httpsv.Log.Level = LogLevel.Trace;
httpsv.OnGet += (sender, e) =>
{
var req = e.Request;
var res = e.Response;
var path = req.RawUrl;
if (path == "/")
path += "index.html";
byte[] contents;
contents = Encoding.ASCII.GetBytes("Hallo");
if (path.EndsWith(".html"))
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".js"))
{
res.ContentType = "application/javascript";
res.ContentEncoding = Encoding.UTF8;
}
res.WriteContent(contents);
};
httpsv.AddWebSocketService<Chat>("/Chat");
httpsv.Start();
if (httpsv.IsListening)
{
Debug.WriteLine("Listening on port {0}, and providing WebSocket services:", httpsv.Port);
foreach (var path in httpsv.WebSocketServices.Paths)
Debug.WriteLine("- {0}", path);
}
Debug.WriteLine("\nPress Enter key to stop the server...");
while (true)
{
}
Chat.cs:
public class Chat : WebSocketBehavior
{
private string _name;
private static int _number = 0;
private string _prefix;
public Chat()
: this(null)
{
}
public Chat(string prefix)
{
_prefix = !prefix.IsNullOrEmpty() ? prefix : "anon#";
}
private string getName()
{
string name = "";
return !name.IsNullOrEmpty() ? name : _prefix + getNumber();
}
private static int getNumber()
{
return Interlocked.Increment(ref _number);
}
protected override void OnClose(CloseEventArgs e)
{
Sessions.Broadcast(String.Format("{0} got logged off...", _name));
}
protected override void OnMessage(MessageEventArgs e)
{
Sessions.Broadcast(String.Format("{0}: {1}", _name, e.Data));
}
protected override void OnOpen()
{
_name = getName();
}
}