예제 #1
0
        public void BeginSyncCheck()
        {
            var sync   = new SyncCheckAction(Context);
            var wxSync = new WebwxSyncAction(Context, async(s, e) =>
            {
                if (e.Type == ActionEventType.EvtRetry)
                {
                    return;
                }
                sync.ExecuteAsync().Forget();
                if (e.Type == ActionEventType.EvtOK)
                {
                    var msgs = (IList <Message>)e.Target;
                    // if (msgs.Count == 0) await Task.Delay(5 * 1000);
                    foreach (var msg in msgs)
                    {
                        var notify = WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Message, msg);
                        await Context.FireNotifyAsync(notify);
                    }
                }
            });

            sync.OnActionEvent += (sender, @event) =>
            {
                if (@event.Type == ActionEventType.EvtError)
                {
                    Context.GetModule <SessionModule>().State = SessionState.Offline;
                    Context.FireNotify(WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Offline));
                }
                else if (@event.Type == ActionEventType.EvtOK)
                {
                    var result = (SyncCheckResult)@event.Target;
                    switch (result)
                    {
                    case SyncCheckResult.Offline:
                    case SyncCheckResult.Kicked:
                        Context.FireNotify(WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Offline));
                        return(Task.CompletedTask);

                    case SyncCheckResult.UsingPhone:
                    case SyncCheckResult.NewMsg:
                        break;

                    case SyncCheckResult.RedEnvelope:
                    case SyncCheckResult.Nothing:
                        break;
                    }
                    (result == SyncCheckResult.Nothing ? sender : wxSync).ExecuteAsyncAuto().Forget();
                }
                return(Task.CompletedTask);
            };

            sync.ExecuteAsyncAuto().Forget();
        }
예제 #2
0
        public void BeginSyncCheck()
        {
            var sync = new SyncCheckAction(Context);
            var wxSync = new WebwxSyncAction(Context, async (s, e) =>
            {
                if (e.Type == ActionEventType.EvtRetry) return;
                sync.ExecuteAsync().Forget();
                if (e.Type == ActionEventType.EvtOK)
                {
                    var msgs = (IList<Message>)e.Target;
                    // if (msgs.Count == 0) await Task.Delay(5 * 1000);
                    foreach (var msg in msgs)
                    {
                        var notify = WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Message, msg);
                        await Context.FireNotifyAsync(notify);
                    }
                }
            });

            sync.OnActionEvent += (sender, @event) =>
            {
                if (@event.Type == ActionEventType.EvtError)
                {
                    Context.GetModule<SessionModule>().State = SessionState.Offline;
                    Context.FireNotify(WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Offline));
                }
                else if (@event.Type == ActionEventType.EvtOK)
                {
                    var result = (SyncCheckResult)@event.Target;
                    switch (result)
                    {
                        case SyncCheckResult.Offline:
                        case SyncCheckResult.Kicked:
                            Context.FireNotify(WeChatNotifyEvent.CreateEvent(WeChatNotifyEventType.Offline));
                            return Task.CompletedTask;

                        case SyncCheckResult.UsingPhone:
                        case SyncCheckResult.NewMsg:
                            break;

                        case SyncCheckResult.RedEnvelope:
                        case SyncCheckResult.Nothing:
                            break;
                    }
                    (result == SyncCheckResult.Nothing ? sender : wxSync).ExecuteAsyncAuto().Forget();
                }
                return Task.CompletedTask;
            };

            sync.ExecuteAsyncAuto().Forget();
        }