mirror of https://github.com/jetkvm/kvm.git
fix: event handler not being called
This commit is contained in:
parent
4bf483909c
commit
2d2c84df0c
|
|
@ -29,8 +29,6 @@ type GRPCClient struct {
|
||||||
|
|
||||||
eventStream pb.NativeService_StreamEventsClient
|
eventStream pb.NativeService_StreamEventsClient
|
||||||
eventM sync.RWMutex
|
eventM sync.RWMutex
|
||||||
eventCh chan *pb.Event
|
|
||||||
eventDone chan struct{}
|
|
||||||
|
|
||||||
onVideoStateChange func(state VideoState)
|
onVideoStateChange func(state VideoState)
|
||||||
onIndevEvent func(event string)
|
onIndevEvent func(event string)
|
||||||
|
|
@ -69,8 +67,6 @@ func NewGRPCClient(opts grpcClientOptions) (*GRPCClient, error) {
|
||||||
conn: conn,
|
conn: conn,
|
||||||
client: client,
|
client: client,
|
||||||
logger: opts.Logger,
|
logger: opts.Logger,
|
||||||
eventCh: make(chan *pb.Event, 100),
|
|
||||||
eventDone: make(chan struct{}),
|
|
||||||
onVideoStateChange: opts.OnVideoStateChange,
|
onVideoStateChange: opts.OnVideoStateChange,
|
||||||
onIndevEvent: opts.OnIndevEvent,
|
onIndevEvent: opts.OnIndevEvent,
|
||||||
onRpcEvent: opts.OnRpcEvent,
|
onRpcEvent: opts.OnRpcEvent,
|
||||||
|
|
@ -117,10 +113,26 @@ func (c *GRPCClient) handleEventStream(stream pb.NativeService_StreamEventsClien
|
||||||
}
|
}
|
||||||
logger.Trace().Msg("received event")
|
logger.Trace().Msg("received event")
|
||||||
|
|
||||||
select {
|
switch event.Type {
|
||||||
case c.eventCh <- event:
|
case "video_state_change":
|
||||||
|
state := event.GetVideoState()
|
||||||
|
if state == nil {
|
||||||
|
logger.Warn().Msg("video state event is nil")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
go c.onVideoStateChange(VideoState{
|
||||||
|
Ready: state.Ready,
|
||||||
|
Error: state.Error,
|
||||||
|
Width: int(state.Width),
|
||||||
|
Height: int(state.Height),
|
||||||
|
FramePerSecond: state.FramePerSecond,
|
||||||
|
})
|
||||||
|
case "indev_event":
|
||||||
|
go c.onIndevEvent(event.GetIndevEvent())
|
||||||
|
case "rpc_event":
|
||||||
|
go c.onRpcEvent(event.GetRpcEvent())
|
||||||
default:
|
default:
|
||||||
logger.Warn().Msg("event channel full, dropping event")
|
logger.Warn().Str("type", event.Type).Msg("unknown event type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -210,44 +222,6 @@ func (c *GRPCClient) WaitReady() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *GRPCClient) handleEvent(event *pb.Event) {
|
|
||||||
switch event.Type {
|
|
||||||
case "video_state_change":
|
|
||||||
state := event.GetVideoState()
|
|
||||||
if state == nil {
|
|
||||||
c.logger.Warn().Msg("video state event is nil")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.onVideoStateChange(VideoState{
|
|
||||||
Ready: state.Ready,
|
|
||||||
Error: state.Error,
|
|
||||||
Width: int(state.Width),
|
|
||||||
Height: int(state.Height),
|
|
||||||
FramePerSecond: state.FramePerSecond,
|
|
||||||
})
|
|
||||||
case "indev_event":
|
|
||||||
c.onIndevEvent(event.GetIndevEvent())
|
|
||||||
case "rpc_event":
|
|
||||||
c.onRpcEvent(event.GetRpcEvent())
|
|
||||||
default:
|
|
||||||
c.logger.Warn().Str("type", event.Type).Msg("unknown event type")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnEvent registers an event handler
|
|
||||||
func (c *GRPCClient) OnEvent(eventType string, handler func(data interface{})) {
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case event := <-c.eventCh:
|
|
||||||
c.handleEvent(event)
|
|
||||||
case <-c.eventDone:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the gRPC client
|
// Close closes the gRPC client
|
||||||
func (c *GRPCClient) Close() error {
|
func (c *GRPCClient) Close() error {
|
||||||
c.closeM.Lock()
|
c.closeM.Lock()
|
||||||
|
|
@ -260,8 +234,6 @@ func (c *GRPCClient) Close() error {
|
||||||
// cancel all ongoing operations
|
// cancel all ongoing operations
|
||||||
c.cancel()
|
c.cancel()
|
||||||
|
|
||||||
close(c.eventDone)
|
|
||||||
|
|
||||||
c.eventM.Lock()
|
c.eventM.Lock()
|
||||||
if c.eventStream != nil {
|
if c.eventStream != nil {
|
||||||
if err := c.eventStream.CloseSend(); err != nil {
|
if err := c.eventStream.CloseSend(); err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue