/* * //ModalTerminalTaskŽü•Ó * public virtual void StartModalTerminalTask(IModalTerminalTask task) { * _modalTerminalTask = task; * new ModalTerminalTaskSite(this).Start(task); * } * public virtual void EndModalTerminalTask() { * _modalTerminalTask = null; * } * public IModalTerminalTask CurrentModalTerminalTask { * get { * return _modalTerminalTask; * } * } */ #region IByteAsyncInputStream public void OnReception(ByteDataFragment data) { try { bool pass_to_terminal = true; //if(_modalTerminalTask!=null) { // bool show_input = _modalTerminalTask.ShowInputInTerminal; // _modalTerminalTask.OnReception(data); // if(!show_input) pass_to_terminal = false; //“ü—Í‚ðŒ©‚¹‚È‚¢(XMODEM‚Æ‚©)‚Ì‚Æ‚«‚̓^[ƒ~ƒiƒ‹‚É—^‚¦‚È‚¢ //} //ƒoƒCƒiƒŠƒƒO‚Ìo—Í _logService.BinaryLogger.Write(data); if (pass_to_terminal) { TerminalDocument document = _document; if (document != null) { lock (document) { //_invalidateParam.Reset(); //‚±‚±‚©‚ç‹ŒInput() //_manipulator.Load(GetDocument().CurrentLine, 0); //_manipulator.CaretColumn = GetDocument().CaretColumn; //ˆ—–{‘Ì _decoder.OnReception(data); //GetDocument().ReplaceCurrentLine(_manipulator.Export()); //GetDocument().CaretColumn = _manipulator.CaretColumn; //‚±‚±‚Ü‚Å //‰E’[‚ɃLƒƒƒŒƒbƒg‚ª—ˆ‚½‚Æ‚«‚Í•Ö‹X“I‚ÉŽŸs‚Ì“ª‚É‚à‚Á‚Ä‚¢‚ //if(document.CaretColumn==document.TerminalWidth) { // document.CurrentLineNumber++; //‚±‚ê‚É‚æ‚Á‚ÄŽŸs‚Ì‘¶Ý‚ð•ÛØ // document.CaretColumn = 0; //} CheckDiscardDocument(); //AdjustTransientScrollBar(); //Œ»Ýs‚ª‰º’[‚ÉŒ©‚¦‚é‚悤‚ÈScrollBarValue‚ðŒvŽZ //int n = document.CurrentLineNumber-document.TerminalHeight+1-document.FirstLineNumber; //if(n < 0) n = 0; //Debug.WriteLine(String.Format("E={0} C={1} T={2} H={3} LC={4} MAX={5} n={6}", _transientScrollBarEnabled, _tag.Document.CurrentLineNumber, _tag.Document.TopLineNumber, _tag.Connection.TerminalHeight, _transientScrollBarLargeChange, _transientScrollBarMaximum, n)); /* if(IsAutoScrollMode(n)) { * _scrollBarValues.Value = n; * document.TopLineNumber = n + document.FirstLineNumber; * } * else * _scrollBarValues.Value = document.TopLineNumber - document.FirstLineNumber; */ //Invalidate‚ðlock‚ÌŠO‚Éo‚·B‚±‚Ì‚Ù‚¤‚ªˆÀ‘S‚ÆŽv‚í‚ꂽ //ŽóMƒXƒŒƒbƒh“à‚ł̓}[ƒN‚ð‚‚¯‚é‚Ì‚ÝBƒ^ƒCƒ}[‚Ås‚¤‚Ì‚ÍIntelliSense‚É•›ì—p‚ ‚é‚̂ňꎞ’âŽ~ //_promptRecognizer.SetContentUpdateMark(); //_promptRecognizer.Recognize(); } } if (_afterExitLockActions.Count > 0) { //Control main = _session.OwnerWindow.AsControl(); //foreach(AfterExitLockDelegate action in _afterExitLockActions) { // main.Invoke(action); //} _afterExitLockActions.Clear(); } } //if(_modalTerminalTask!=null) _modalTerminalTask.NotifyEndOfPacket(); _session.NotifyViewsDataArrived(); } catch (Exception ex) { RuntimeUtil.ReportException(ex); } }
public void OnReception(ByteDataFragment data) { try { bool pass_to_terminal = true; if (_modalTerminalTask != null) { bool show_input = _modalTerminalTask.ShowInputInTerminal; _modalTerminalTask.OnReception(data); if (!show_input) { pass_to_terminal = false; //入力を見せない(XMODEMとか)のときはターミナルに与えない } } //バイナリログの出力 _logService.BinaryLogger.Write(data); if (pass_to_terminal) { TerminalDocument document = _document; lock (document) { //_invalidateParam.Reset(); //ここから旧Input() _manipulator.Load(GetDocument().CurrentLine, 0); _manipulator.CaretColumn = GetDocument().CaretColumn; _manipulator.DefaultDecoration = _currentdecoration; //処理本体 _decoder.OnReception(data); GetDocument().ReplaceCurrentLine(_manipulator.Export()); GetDocument().CaretColumn = _manipulator.CaretColumn; //ここまで //右端にキャレットが来たときは便宜的に次行の頭にもっていく if (document.CaretColumn == document.TerminalWidth) { document.CurrentLineNumber++; //これによって次行の存在を保証 document.CaretColumn = 0; } CheckDiscardDocument(); AdjustTransientScrollBar(); //現在行が下端に見えるようなScrollBarValueを計算 int n = document.CurrentLineNumber - document.TerminalHeight + 1 - document.FirstLineNumber; if (n < 0) { n = 0; } //Debug.WriteLine(String.Format("E={0} C={1} T={2} H={3} LC={4} MAX={5} n={6}", _transientScrollBarEnabled, _tag.Document.CurrentLineNumber, _tag.Document.TopLineNumber, _tag.Connection.TerminalHeight, _transientScrollBarLargeChange, _transientScrollBarMaximum, n)); if (IsAutoScrollMode(n)) { _scrollBarValues.Value = n; document.TopLineNumber = n + document.FirstLineNumber; } else { _scrollBarValues.Value = document.TopLineNumber - document.FirstLineNumber; } //Invalidateをlockの外に出す。このほうが安全と思われた //受信スレッド内ではマークをつけるのみ。タイマーで行うのはIntelliSenseに副作用あるので一時停止 //_promptRecognizer.SetContentUpdateMark(); _promptRecognizer.Recognize(); } if (_afterExitLockActions.Count > 0) { Control main = _session.OwnerWindow.AsControl(); foreach (AfterExitLockDelegate action in _afterExitLockActions) { main.Invoke(action); } _afterExitLockActions.Clear(); } } if (_modalTerminalTask != null) { _modalTerminalTask.NotifyEndOfPacket(); } _session.NotifyViewsDataArrived(); } catch (Exception ex) { RuntimeUtil.ReportException(ex); } }