У меня есть класс Server, который создает объект ClientHandler во время выполнения при получении нового соединения.Внутри ClientHandler мне нужно запустить clientEvent при получении конкретных сообщений.В моем классе Form есть ссылка на класс Server, но мне нужно подписаться на clientEvent в объекте ClientHandler.Тем не менее, объект еще не существует во время проектирования.Как я могу сделать подписку?
Я создал обработчик событий на сервере, который подписывается на clientEvent, и он вызывает другое serverEvent.В классе Form я подписываюсь на serverEvent.Таким образом, я слушаю clientEvent косвенно.Но я верю, что есть лучший способ сделать это.
public delegate void SomeEvent(string message);
public class Server
{
public ClientHandler clientHandler;
public event SomeEvent serverEvent;
// callback function when new connection received
public void on_connected()
{
clientHandler = new ClientHandler(...)
clientHandler.clientEvent += ClientEventHandler;
}
public void ClientEventHandler(string message)
{
serverEvent?.Invoke(message)
}
}
public class ClientHandler
{
public event SomeEvent clientEvent;
// callback when message is read
void ReadCallback(...)
{
...
// Some message received
clientEvent?.Invoke("Message received: " + someMessage);
}
public partial class From1 : Form
{
public Form1()
{
Server server = new Server(...);
server.serverEvent += serverEventHandler;
...
}
private void serverEventHandler(string message)
{
// do something with message
}
}