#c# #blazor-server-side
Вопрос:
Я пытаюсь создать серверную программу с веб-интерфейсом, используя сервер blazor. Но я не могу найти способ передать данные из моего серверного класса в мой индексный файл. В этом проекте у меня есть 2 основные проблемы.
1 — Пользовательский интерфейс не обновляется, когда клиент подключается к серверу и его объект хранится в словаре.
2 — Я не могу понять, как передать сообщения об ошибках из моего серверного класса в файл razor (индекс).
Несмотря на то, что я пытаюсь сделать эти материалы непосредственно из своего серверного класса, я хотел бы сделать их из класса промежуточного ПО, который будет получать данные из серверного класса, а затем передавать их в мой индексный файл.
Что я хотел бы сделать:
Индекс.бритва
@page "/"
@using System.Net.Sockets
@using System.Threading
@inject Server server
<table class="table">
<thead>
<tr>
<th scope="col">Dispositivos</th>
<th scope="col">IP</th>
<th scope="col">Porta</th>
</tr>
</thead>
<tbody>
<tr>
<td>Servidor</td>
<td>127.0.0.1</td>
<td>8600</td>
</tr>
@* Remove this and get data from my middleware class *@
@foreach (KeyValuePair<string, TcpClient> client in server._connectedClients)
{
string endpoint = client.Value.Client.RemoteEndPoint.ToString();
string ip = endpoint.Split(":")[0];
string port = endpoint.Split(":")[1];
string device = client.Key;
<tr>
<td>@device</td>
<td>@ip</td>
<td>@port</td>
</tr>
}
</tbody>
</table>
@code {
protected override void OnInitialized() {
Thread serverThread = new Thread(() => server.Start());
serverThread.Start();
}
}
Класс промежуточного ПО
class Middleware {
public string[] AddDeviceEntry(string device, string endpoint) {
// Return this object to index.razor somehow and update the UI
return new string[] { device, endpoint };
}
public string ErrorMessage(string msg) {
// Return this object to index.razor somehow and update the UI
return msg;
}
}
Server.cs
class Server {
private TcpListener _server;
private Middleware _mid;
public Dictionary<string, TcpClient> _connectedClients = new();
public Server(int portNum, Middleware middleware) {
_server = new TcpListener(IPAddress.Any, portNum);
_mid = middleware;
}
// Some stuffs...
// When client connects
_connectedClients.Add("some device", client);
_mid.AddDeviceEntry("some device", client.Client.RemoteEndPoint.ToString());
// When getting some error
_mid.ErrorMessage("some error message");
}