Я создаю службу gRP C, которая позволяет клиентам публиковать c интерфейс
Мой протофиль:
syntax = "proto3";
package Tests;
import "google/protobuf/any.proto";
message ListenTest1EventStream {
uint64 objectId = 1;
}
message EventTestEvent {
}
service Test1ObjectService {
rpc ListenEvents (ListenTest1EventStream) returns (stream google.protobuf.Any);
}
Мой C# сервер:
ISomeService
{
event EventHandler<EventArgs> TestEvent;
}
public class Server : Test1ObjectService.Test1ObjectServiceBase
{
private readonly ISomeService _someService;
public Server(ISomeService someService)
{
_someService = someService;
}
public override async Task ListenEvents(ListenTest1EventStream request, IServerStreamWriter<Any> responseStream, ServerCallContext context)
{
// Begin monitoring event handlers, wait indefinitely
var handler = new EventHandler<EventArgs>((sender, args) =>
{
responseStream.WriteAsync(Any.Pack(new EventTestEvent()));
});
_someService.TestEvent += handler;
// TODO: Wait until response stream is forcibly closed. How?
await responseStream.WaitForSatusChangedOrSomething();
_someService.TestEvent -= handler;
}
}
Как узнать, когда клиент отключается?