示例#1
0
            public bool Flag;       // toggled to mark reachability

            public Line([CanBeNull] ILabel label, TCode code, [CanBeNull] ILabel target, PeepholeLineType type)
            {
                Label       = label;
                Code        = code;
                TargetLabel = target;
                Type        = type;
            }
 private void sendCode(TCode cmd)
 {
     if(SysMessages.Eq(cmd.wParam, CodeDown)) {
         sendCodeDown();
     }
     else if(SysMessages.Eq(cmd.wParam, CodeUp)) {
         sendCodeUp();
     }
 }
示例#3
0
            public void CopyFrom([NotNull] Line other)
            {
                Label       = other.Label;
                Code        = other.Code;
                TargetLabel = other.TargetLabel;
                Type        = other.Type;

                TargetLine = other.TargetLine;
                Flag       = other.Flag;
            }
            public override FilterResult process(int nCode, WPARAM wParam, LPARAM lParam)
            {
                //if(shadowClick) { // now it will be processed via ReCodes + lowLevelMouseProc
                //    return FilterResult.Continue;
                //}

                if(!raisedCodeUp && SysMessages.Eq(wParam, CodeDown)) {
                    stampCodeDown = DateTime.Now;
                    return FilterResult.Continue;
                }

                if(raisedCodeUp && SysMessages.Eq(wParam, CodeUp)) {
                    return FilterResult.Continue;
                }

                var delta   = (DateTime.Now - stampCodeDown).TotalMilliseconds;
                var v       = Data;

                if((delta > v.deltaMin && delta <= v.deltaMax) && SysMessages.Eq(wParam, CodeUp)) {
                    LSender.Send(this, $"{CodeDown} <-{delta}-> {CodeUp}-{CodeDown} :: consider as a user click", Message.Level.Debug);
                    return FilterResult.Continue;
                }

                if(SysMessages.Eq(wParam, CodeUp)) {
                    raisedCodeUp = true;
                }

                buffer.Enqueue(new TCode() {
                    nCode   = nCode,
                    lParam  = lParam,
                    wParam  = wParam
                });
                LSender.Send(this, $"'{wParam}' has been buffered ({buffer.Count})", Message.Level.Trace);

                if(lockedThread) {
                    return FilterResult.Abort;
                }

                Task.Factory.StartNew(() =>
                {
                    lock(sync)
                    {
                        lockedThread = true;

                        var cmd1 = new TCode();
                        while(buffer.Count > 0)
                        {
                            if(!buffer.TryDequeue(out cmd1)) {
                                shortSleep();
                                continue;
                            }

                            if(SysMessages.Eq(cmd1.wParam, CodeUp)) {
                                // now we should look possible bug: down ... [up, down] ... up
                                waitNewCodes();
                                break;
                            }

                            if(SysMessages.Eq(cmd1.wParam, CodeDown)) {
                                sendCodeDown();
                                lockedThread = false;
                                return;
                            }
                        }

                        if(SysMessages.Eq(cmd1.wParam, 0)) {
                            raisedCodeUp = false;
                            lockedThread = false;
                            return;
                        }

                        TCode cmd2;
                        if(buffer.Count > 0)
                        {
                            while(!buffer.TryDequeue(out cmd2)) {
                                shortSleep();
                            }
                            LSender.Send(this, $"Buffer > 0 :: {cmd2.wParam}", Message.Level.Trace);
                        }
                        else {
                            cmd2 = new TCode();
                        }

                        if(SysMessages.Eq(cmd1.wParam, CodeUp)
                            && SysMessages.Eq(cmd2.wParam, CodeDown))
                        {
                            LSender.Send(this, $"Found bug with recovering of codes {CodeUp} -> {CodeDown}", Message.Level.Info);
                            parent.trigger();
                        }
                        else {
                            resend(cmd1, cmd2);
                        }

                        raisedCodeUp = false;
                        lockedThread = false;
                    }
                });

                //stamp = DateTime.Now;
                return FilterResult.Abort;
            }
 private void resend(TCode cmd1, TCode cmd2)
 {
     sendCode(cmd1);
     sendCode(cmd2);
 }
示例#6
0
文件: Char.cs 项目: thinking2535/Rso
 public CChar(TCode Code_, bool IsPlaying_)
 {
     _Code      = Code_;
     _IsPlaying = IsPlaying_;
 }