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(); } }
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); }
public CChar(TCode Code_, bool IsPlaying_) { _Code = Code_; _IsPlaying = IsPlaying_; }