ConnectionHistory.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: ConnectionHistory.cs,v 1.2 2005/04/20 08:45:44 okajima Exp $
  4. */
  5. using System;
  6. using System.IO;
  7. using System.Collections;
  8. using System.Collections.Specialized;
  9. using System.Text;
  10. using Poderosa.ConnectionParam;
  11. using Poderosa.Toolkit;
  12. using Poderosa.Communication;
  13. using Granados.SSHC;
  14. namespace Poderosa.Config {
  15. /// <summary>
  16. /// 夁嫀偺愙懕棜楌偺曐帩丅僔儕傾儔僀僘婡擻傕娷傓丅
  17. /// </summary>
  18. internal class ConnectionHistory : IEnumerable {
  19. protected ArrayList _history; //TCPTerminalParam偺僐儗僋僔儑儞
  20. public ConnectionHistory() {
  21. _history = new ArrayList();
  22. }
  23. public IEnumerator GetEnumerator() {
  24. return _history.GetEnumerator();
  25. }
  26. public void Clear() {
  27. _history.Clear();
  28. }
  29. public void Append(TerminalParam tp) {
  30. _history.Add(tp);
  31. }
  32. public int Count {
  33. get {
  34. return _history.Count;
  35. }
  36. }
  37. public TCPTerminalParam TopTCPParam {
  38. get {
  39. foreach(TerminalParam p in _history) {
  40. TCPTerminalParam tp = p as TCPTerminalParam;
  41. if(tp!=null) return tp;
  42. }
  43. return new TelnetTerminalParam("");
  44. }
  45. }
  46. public SerialTerminalParam TopSerialParam {
  47. get {
  48. foreach(TerminalParam p in _history) {
  49. SerialTerminalParam tp = p as SerialTerminalParam;
  50. if(tp!=null) return tp;
  51. }
  52. return new SerialTerminalParam();
  53. }
  54. }
  55. public CygwinTerminalParam TopCygwinParam {
  56. get {
  57. foreach(TerminalParam p in _history) {
  58. CygwinTerminalParam tp = p as CygwinTerminalParam;
  59. if(tp!=null) return tp;
  60. }
  61. return new CygwinTerminalParam();
  62. }
  63. }
  64. public SFUTerminalParam TopSFUParam {
  65. get {
  66. foreach(TerminalParam p in _history) {
  67. SFUTerminalParam tp = p as SFUTerminalParam;
  68. if(tp!=null) return tp;
  69. }
  70. return new SFUTerminalParam();
  71. }
  72. }
  73. public TCPTerminalParam SearchByHost(string host) {
  74. foreach(TerminalParam p in _history) {
  75. TCPTerminalParam tp = p as TCPTerminalParam;
  76. if(tp!=null && tp.Host==host) return tp;
  77. }
  78. return null;
  79. }
  80. public void LimitCount(int count) {
  81. if(_history.Count > count) _history.RemoveRange(count, _history.Count-count);
  82. }
  83. //嵟怴偺MRU儕僗僩偵峏怴
  84. public void Update(TerminalParam newparam_) {
  85. int n = 0;
  86. TerminalParam newparam = (TerminalParam)newparam_.Clone();
  87. newparam.LogPath = "";
  88. newparam.LogType = LogType.None;
  89. foreach(TerminalParam p in _history) {
  90. if(p.Equals(newparam)) {
  91. _history.RemoveAt(n);
  92. _history.Insert(0, newparam);
  93. return;
  94. }
  95. n++;
  96. }
  97. _history.Insert(0, newparam);
  98. //儔儞僞僀儉偵弌偰偔傞岓曗悢偼柍惂尷偵偡傞
  99. if(_history.Count > 100)
  100. _history.RemoveRange(GApp.Options.MRUSize, _history.Count-100);
  101. }
  102. public void ReplaceIdenticalParam(TerminalParam newparam_) {
  103. int n = 0;
  104. TerminalParam newparam = (TerminalParam)newparam_.Clone();
  105. newparam.LogPath = "";
  106. newparam.LogType = LogType.None;
  107. foreach(TerminalParam p in _history) {
  108. if(p.Equals(newparam)) {
  109. _history[n] = newparam;
  110. return;
  111. }
  112. n++;
  113. }
  114. }
  115. public void Save(ConfigNode parent) {
  116. LimitCount(GApp.Options.MRUSize);
  117. ConfigNode node = new ConfigNode("connection-history");
  118. foreach(TerminalParam p in _history) {
  119. ConfigNode con = new ConfigNode("connection");
  120. p.Export(con);
  121. node.AddChild(con);
  122. }
  123. parent.AddChild(node);
  124. }
  125. public void Load(ConfigNode parent) {
  126. ConfigNode node = parent.FindChildConfigNode("connection-history");
  127. if(node!=null) {
  128. foreach(ConfigNode ch in node.Children) {
  129. _history.Add(TerminalParam.CreateFromConfigNode(ch));
  130. }
  131. }
  132. }
  133. private delegate string StrProp(TerminalParam p);
  134. private delegate int    IntProp(TerminalParam p);
  135. private string ReturnHost(TerminalParam p) {
  136. TCPTerminalParam pp = p as TCPTerminalParam;
  137. return pp==null? null : pp.Host;
  138. }
  139. private int    ReturnPort(TerminalParam p) {
  140. TCPTerminalParam pp = p as TCPTerminalParam;
  141. return pp==null? -1 : pp.Port;
  142. }
  143. private string ReturnAccount(TerminalParam p) {
  144. SSHTerminalParam pp = p as SSHTerminalParam;
  145. return pp==null? null : pp.Account;
  146. }
  147. private string ReturnLogPath(TerminalParam p) {
  148. return p.LogPath;
  149. }
  150. private StringCollection CollectString(StrProp prop) {
  151. StringCollection result = new StringCollection();
  152. foreach(TerminalParam param in _history) {
  153. string t  = prop(param);
  154. if(t!=null && t.Length>0 && !result.Contains(t)) result.Add(t);
  155. }
  156. return result;
  157. }
  158. private int[] CollectInt(IntProp prop, ArrayList result) {
  159. foreach(TerminalParam param in _history) {
  160. int t  = prop(param);
  161. if(t>0 && !result.Contains(t)) result.Add(t);
  162. }
  163. return (int[])result.ToArray(typeof(int));
  164. }
  165. //TCPTerminalParam奺梫慺偛偲偺僐儗僋僔儑儞
  166. public StringCollection Hosts {
  167. get {
  168. return CollectString(new StrProp(this.ReturnHost));
  169. }
  170. }
  171. public int[] Ports {
  172. get {
  173. ArrayList a = new ArrayList();
  174. a.Add(23); a.Add(22); //Telnet傪愭偵昞帵偡傞
  175. return CollectInt(new IntProp(this.ReturnPort), a);
  176. }
  177. }
  178. public StringCollection Accounts {
  179. get {
  180. return CollectString(new StrProp(this.ReturnAccount));
  181. }
  182. }
  183. public StringCollection LogPaths {
  184. get {
  185. return CollectString(new StrProp(this.ReturnLogPath));
  186. }
  187. }
  188. }
  189. }