public async Task Stop() { if (state == StateEnum.Off) { Logger.LogWarning("stop() is called on a OFF puppet. await ready(off) and return."); state = StateEnum.Off; return; } try { state = StateEnum.Pending; if (LoginInfo.LogOnOff()) { EventLogoutPayload logoutPayload = new EventLogoutPayload() { ContactId = selfId, Data = "stop() this.grpcClient not exist" }; await _localEventBus.PublishAsync(logoutPayload); selfId = string.Empty; } StopGrpcStream(); if (grpcClient != null) { await grpcClient.StopAsync(new StopRequest()); } await StopGrpcClient(); // 取消所有订阅 _localEventBus.UnsubscribeAll(typeof(LocalEventBus)); } catch (Exception ex) { Logger.LogError(ex.StackTrace); throw new BusinessException(ex.StackTrace); } finally { state = StateEnum.Off; } }
public virtual bool Emit(EventLogoutPayload payload) => Emit("logout", payload);