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;
            }
        }
Пример #2
0
 public virtual bool Emit(EventLogoutPayload payload) => Emit("logout", payload);