Changeset 399 for TwitterIrcGateway
- Timestamp:
- 05/31/08 12:55:39 (3 months ago)
- Files:
-
- TwitterIrcGateway/trunk/TwitterIrcGateway.sln (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGateway/App.config (modified) (1 diff)
- TwitterIrcGateway/trunk/TwitterIrcGateway/Program.cs (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGateway/Settings.Designer.cs (modified) (1 diff)
- TwitterIrcGateway/trunk/TwitterIrcGateway/Settings.settings (modified) (1 diff)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCLI/Program.cs (modified) (6 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore (modified) (1 prop)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Config.cs (copied) (copied from TwitterIrcGateway/branches/im-support/TwitterIrcGatewayCore/Config.cs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/EventArgs.cs (modified) (1 diff)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Filter.cs (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Group.cs (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/IRCClient/ChannelMode.cs (modified) (1 diff)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/IRCClient/IRCMessage.cs (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Server.cs (modified) (3 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Session.cs (modified) (33 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/TwitterIMService.cs (copied) (copied from TwitterIrcGateway/branches/im-support/TwitterIrcGatewayCore/TwitterIMService.cs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/TwitterIrcGatewayCore.csproj (modified) (2 diffs)
- TwitterIrcGateway/trunk/TwitterIrcGatewayCore/TwitterService.cs (modified) (26 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
TwitterIrcGateway/trunk/TwitterIrcGateway.sln
r379 r399 7 7 EndProject 8 8 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwitterIrcGatewayCore", "TwitterIrcGatewayCore\TwitterIrcGatewayCore.csproj", "{8A256703-BDC7-4E96-8AC3-89A56A2AFB86}" 9 ProjectSection(ProjectDependencies) = postProject 10 {DC39021C-FA24-4E34-AB4A-3260BB5314AF} = {DC39021C-FA24-4E34-AB4A-3260BB5314AF} 11 EndProjectSection 12 EndProject 13 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "agsXMPP2008", "TwitterIrcGatewayCore\agsXMPP\agsXMPP2008.csproj", "{DC39021C-FA24-4E34-AB4A-3260BB5314AF}" 9 14 EndProject 10 15 Global … … 26 31 {8A256703-BDC7-4E96-8AC3-89A56A2AFB86}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 32 {8A256703-BDC7-4E96-8AC3-89A56A2AFB86}.Release|Any CPU.Build.0 = Release|Any CPU 33 {DC39021C-FA24-4E34-AB4A-3260BB5314AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 34 {DC39021C-FA24-4E34-AB4A-3260BB5314AF}.Debug|Any CPU.Build.0 = Debug|Any CPU 35 {DC39021C-FA24-4E34-AB4A-3260BB5314AF}.Release|Any CPU.ActiveCfg = Release|Any CPU 36 {DC39021C-FA24-4E34-AB4A-3260BB5314AF}.Release|Any CPU.Build.0 = Release|Any CPU 28 37 EndGlobalSection 29 38 GlobalSection(SolutionProperties) = preSolution TwitterIrcGateway/trunk/TwitterIrcGateway/App.config
r369 r399 62 62 <value>False</value> 63 63 </setting> 64 <setting name="POSTFetchMode" serializeAs="String"> 65 <value>False</value> 66 </setting> 64 67 </Misuzilla.Applications.TwitterIrcGateway.Settings> 65 68 </userSettings> TwitterIrcGateway/trunk/TwitterIrcGateway/Program.cs
r369 r399 62 62 _server.ClientMessageWait = _settings.ClientMessageWait; 63 63 _server.BroadcastUpdateMessageIsNotice = _settings.BroadcastUpdateMessageIsNotice; 64 _server.SessionStartedRecieved += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedRecieved); 64 _server.POSTFetchMode = _settings.POSTFetchMode; 65 _server.SessionStartedReceived += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedReceived); 65 66 try 66 67 { … … 96 97 } 97 98 98 void _server_SessionStartedRec ieved(object sender, SessionStartedEventArgs e)99 void _server_SessionStartedReceived(object sender, SessionStartedEventArgs e) 99 100 { 100 101 _notifyIcon.ShowBalloonTip(1000 * 10, Name, String.Format("���[�U {0} ���T�[�o�ɐڑ����܂����B", e.UserName), ToolTipIcon.Info); TwitterIrcGateway/trunk/TwitterIrcGateway/Settings.Designer.cs
r369 r399 239 239 } 240 240 } 241 242 [global::System.Configuration.UserScopedSettingAttribute()] 243 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 244 [global::System.Configuration.DefaultSettingValueAttribute("False")] 245 public bool POSTFetchMode { 246 get { 247 return ((bool)(this["POSTFetchMode"])); 248 } 249 set { 250 this["POSTFetchMode"] = value; 251 } 252 } 241 253 } 242 254 } TwitterIrcGateway/trunk/TwitterIrcGateway/Settings.settings
r369 r399 57 57 <Value Profile="(Default)">False</Value> 58 58 </Setting> 59 <Setting Name="POSTFetchMode" Type="System.Boolean" Scope="User"> 60 <Value Profile="(Default)">False</Value> 61 </Setting> 59 62 </Settings> 60 63 </SettingsFile> TwitterIrcGateway/trunk/TwitterIrcGatewayCLI/Program.cs
r377 r399 19 19 IPAddress bindAddress = IPAddress.Loopback; 20 20 Encoding encoding = Encoding.GetEncoding("ISO-2022-JP"); 21 IWebProxy proxy = Web Proxy.GetDefaultProxy();21 IWebProxy proxy = WebRequest.DefaultWebProxy; 22 22 23 23 CommandLineOptions options; … … 72 72 _server.ClientMessageWait = options.ClientMessageWait; 73 73 _server.BroadcastUpdateMessageIsNotice = options.BroadcastUpdateMessageIsNotice; 74 _server.SessionStartedRecieved += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedRecieved); 74 _server.POSTFetchMode = options.PostFetchMode; 75 _server.SessionStartedReceived += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedReceived); 75 76 _server.Proxy = proxy; 76 77 … … 92 93 Console.WriteLine("[Configuration] BroadcastUpdate: {0}", _server.BroadcastUpdate); 93 94 Console.WriteLine("[Configuration] ClientMessageWait: {0}", _server.ClientMessageWait); 94 Console.WriteLine("[Configuration] Broadca tUpdateMessageIsNotice: {0}", _server.BroadcastUpdateMessageIsNotice);95 Console.WriteLine("[Configuration] BroadcastUpdateMessageIsNotice: {0}", _server.BroadcastUpdateMessageIsNotice); 95 96 Console.WriteLine("[Configuration] Proxy: {0}", options.Proxy); 97 Console.WriteLine("[Configuration] PostFetchMode: {0}", options.PostFetchMode); 96 98 97 99 _server.Start(bindAddress, options.Port); … … 108 110 } 109 111 110 static void _server_SessionStartedRec ieved(object sender, SessionStartedEventArgs e)112 static void _server_SessionStartedReceived(object sender, SessionStartedEventArgs e) 111 113 { 112 114 //Console.WriteLine("[Connect] User: {0}", e.UserName); … … 157 159 158 160 [DefaultValue(false)] 159 [Description("enable cookie-login mode ")]161 [Description("enable cookie-login mode (Obsolete / not working)")] 160 162 public Boolean CookieLoginMode { get; set; } 161 163 … … 191 193 [Description("HTTP proxy server URL (http://host:port)")] 192 194 public String Proxy { get; set; } 195 196 [DefaultValue(false)] 197 [Description("fetch data by POST method")] 198 public Boolean PostFetchMode { get; set; } 193 199 } 194 200 } TwitterIrcGateway/trunk/TwitterIrcGatewayCore
- Property svn:externals set to
agsXMPP http://svn.ag-software.de/ags/trunk/agsxmpp/
- Property svn:externals set to
TwitterIrcGateway/trunk/TwitterIrcGatewayCore/EventArgs.cs
r31 r399 8 8 namespace Misuzilla.Applications.TwitterIrcGateway 9 9 { 10 public class MessageRec ievedEventArgs : EventArgs10 public class MessageReceivedEventArgs : EventArgs 11 11 { 12 12 public IRCMessage Message; 13 13 public TcpClient Client; 14 14 public StreamWriter Writer; 15 public MessageRec ievedEventArgs(IRCMessage msg, StreamWriter sw, TcpClient tcpClient)15 public MessageReceivedEventArgs(IRCMessage msg, StreamWriter sw, TcpClient tcpClient) 16 16 { 17 17 Writer = sw; TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Filter.cs
r347 r399 6 6 using System.Diagnostics; 7 7 using Misuzilla.Net.Irc; 8 using System.IO; 9 using System.Xml; 8 10 9 11 namespace Misuzilla.Applications.TwitterIrcGateway.Filter … … 76 78 77 79 return true; 80 } 81 82 /// <summary> 83 /// 84 /// </summary> 85 /// <param name="path"></param> 86 /// <returns></returns> 87 public static Filters Load(String path) 88 { 89 if (File.Exists(path)) 90 { 91 Trace.WriteLine(String.Format("Load Filters: {0}", path)); 92 try 93 { 94 using (FileStream fs = new FileStream(path, FileMode.Open)) 95 { 96 try 97 { 98 Filters filters = Filters.Serializer.Deserialize(fs) as Filters; 99 if (filters != null) 100 { 101 foreach (FilterItem item in filters.Items) 102 { 103 Trace.WriteLine(String.Format(" - Filter:{0}", item.ToString())); 104 } 105 return filters; 106 } 107 } 108 catch (XmlException xe) { Trace.WriteLine(xe.Message); } 109 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } 110 } 111 } 112 catch (IOException ie) 113 { 114 Trace.WriteLine(ie.Message); 115 throw; 116 } 117 } 118 return new Filters(); 78 119 } 79 120 } TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Group.cs
r373 r399 7 7 using System.Xml; 8 8 using Misuzilla.Net.Irc; 9 using System.Diagnostics; 9 10 10 11 namespace Misuzilla.Applications.TwitterIrcGateway … … 59 60 60 61 return retGroups; 62 } 63 64 /// <summary> 65 /// 66 /// </summary> 67 /// <param name="path"></param> 68 /// <returns></returns> 69 public static Groups Load(String path) 70 { 71 // group �ǂݎ� 72 if (File.Exists(path)) 73 { 74 Trace.WriteLine(String.Format("Load Group: {0}", path)); 75 try 76 { 77 using (FileStream fs = new FileStream(path, FileMode.Open)) 78 { 79 try 80 { 81 Groups groups = Groups.Deserialize(fs); 82 if (groups != null) 83 return groups; 84 } 85 catch (XmlException xe) { Trace.WriteLine(xe.Message); } 86 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } 87 } 88 } 89 catch (IOException ie) 90 { 91 Trace.WriteLine(ie.Message); 92 throw; 93 } 94 } 95 return new Groups(); 96 } 97 98 /// <summary> 99 /// 100 /// </summary> 101 /// <param name="path"></param> 102 public void Save(String path) 103 { 104 Trace.WriteLine(String.Format("Save Group: {0}", path)); 105 try 106 { 107 String dir = Path.GetDirectoryName(path); 108 Directory.CreateDirectory(dir); 109 using (FileStream fs = new FileStream(path, FileMode.Create)) 110 { 111 try 112 { 113 this.Serialize(fs); 114 } 115 catch (XmlException xe) { Trace.WriteLine(xe.Message); } 116 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } 117 } 118 } 119 catch (IOException ie) 120 { 121 Trace.WriteLine(ie.Message); 122 throw; 123 } 61 124 } 62 125 } TwitterIrcGateway/trunk/TwitterIrcGatewayCore/IRCClient/ChannelMode.cs
r373 r399 67 67 continue; 68 68 } 69 70 // �p�����[�^���������Ȃ̂ɂȂ��ꍇ 71 if (hasParam && (i + paramPosition) > (param.Length - 1)) 72 { 73 // throw new ChannelModeParseException(); 74 Debug.WriteLine(String.Format("Channel mode: {0} / Invalid Parameters", s[j])); 75 continue; 76 } 69 77 70 78 ChannelMode cmode = new ChannelMode() TwitterIrcGateway/trunk/TwitterIrcGatewayCore/IRCClient/IRCMessage.cs
r374 r399 639 639 private String _target = ""; 640 640 641 public String ModeArgs 642 { 643 get { return _modeargs; } 644 set { _modeargs = value; } 645 } 646 647 public String Target 648 { 649 get { return _target; } 650 set { _target = value; } 651 } 652 641 653 public 642 654 ModeMessage() : base() … … 648 660 { 649 661 _target = this.CommandParams[0]; 650 _modeargs = this.CommandParams[1]; 662 663 StringBuilder sb = new StringBuilder(); 664 for (var i = 1; i < this.CommandParams.Length; i++) 665 { 666 if (String.IsNullOrEmpty(this.CommandParams[i])) 667 break; 668 669 if (i != 1) 670 sb.Append(" "); 671 672 sb.Append(this.CommandParams[i]); 673 } 674 _modeargs = sb.ToString(); 651 675 } 652 676 public TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Server.cs
r376 r399 93 93 public IWebProxy Proxy = null; 94 94 95 /// <summary> 96 /// �f�[�^�̎擾��OST���\�b�h�𗘗p���邩�ǂ��� 97 /// </summary> 98 public Boolean POSTFetchMode = false; 99 95 100 public const String ServerName = "localhost"; 96 101 public const String ServerNick = "$TwitterIrcGatewayServer$"; 97 102 98 public event EventHandler<SessionStartedEventArgs> SessionStartedRec ieved;103 public event EventHandler<SessionStartedEventArgs> SessionStartedReceived; 99 104 100 105 void AcceptHandled(IAsyncResult ar) … … 111 116 _sessions.Add(session); 112 117 } 113 session.SessionStarted += new EventHandler<SessionStartedEventArgs>(session_SessionStartedRec ieved);118 session.SessionStarted += new EventHandler<SessionStartedEventArgs>(session_SessionStartedReceived); 114 119 session.SessionEnded += new EventHandler(session_SessionEnded); 115 120 session.Start(); … … 125 130 } 126 131 127 void session_SessionStartedRec ieved(object sender, SessionStartedEventArgs e)132 void session_SessionStartedReceived(object sender, SessionStartedEventArgs e) 128 133 { 129 134 // ���p 130 if (SessionStartedRec ieved != null)135 if (SessionStartedReceived != null) 131 136 { 132 SessionStartedRec ieved(sender, e);137 SessionStartedReceived(sender, e); 133 138 } 134 139 } TwitterIrcGateway/trunk/TwitterIrcGatewayCore/Session.cs
r376 r399 27 27 private String _clientHost; 28 28 private TwitterService _twitter; 29 private TwitterIMService _twitterIm; 29 30 private LinkedList<Int32> _lastStatusIdsFromGateway; 30 private Timer _timer;31 private Timer _timerDirectMessage;32 private Timer _timerReplies;33 31 private Groups _groups; 34 32 private Filters _filter; 35 36 private DateTime _lastAccessTimeline = new DateTime(); 37 private DateTime _lastAccessReplies = new DateTime(); 33 private Config _config; 34 38 35 private List<String> _nickNames = new List<string>(); 39 36 private Boolean _isFirstTime = true; 40 private Boolean _isFirstTimeReplies = true; 41 private DateTime _lastAccessDirectMessage = DateTime.Now; 42 private LinkedList<Status> _statusBuffer; 43 private LinkedList<Status> _repliesBuffer; 37 44 38 private TraceListener _traceListeneer; 45 39 46 private event EventHandler<MessageRec ievedEventArgs> MessageRecieved;40 private event EventHandler<MessageReceivedEventArgs> MessageReceived; 47 41 private String _username; 48 42 private String _password; … … 52 46 public event EventHandler SessionEnded; 53 47 48 private Boolean _requireIMReconnect = false; 49 private Int32 _imReconnectCount = 0; 50 54 51 public Session(Server server, TcpClient tcpClient) 55 52 { 56 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_USER); 57 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_NICK); 58 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_PASS); 59 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_QUIT); 60 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_PRIVMSG); 61 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_WHOIS); 62 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_INVITE); 63 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_JOIN); 64 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_PART); 65 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_KICK); 66 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_LIST); 67 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TIGGC); 68 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TOPIC); 69 MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_MODE); 53 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_USER); 54 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_NICK); 55 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_PASS); 56 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_QUIT); 57 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_PRIVMSG); 58 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_WHOIS); 59 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_INVITE); 60 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_JOIN); 61 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_PART); 62 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_KICK); 63 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_LIST); 64 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_TIGGC); 65 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_TOPIC); 66 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_MODE); 67 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_TIGIMENABLE); 68 MessageReceived += new EventHandler<MessageReceivedEventArgs>(MessageReceived_TIGIMDISABLE); 70 69 71 70 _groups = new Groups(); 72 71 _filter = new Filters(); 72 _config = new Config(); 73 73 74 74 _server = server; 75 75 _tcpClient = tcpClient; 76 _statusBuffer = new LinkedList<Status>();77 _repliesBuffer = new LinkedList<Status>();78 76 _lastStatusIdsFromGateway = new LinkedList<int>(); 79 _timer = new Timer(new TimerCallback(OnTimerCallback), null, Timeout.Infinite, Timeout.Infinite);80 _timerDirectMessage = new Timer(new TimerCallback(OnTimerCallbackDirectMessage), null, Timeout.Infinite, Timeout.Infinite);81 _timerReplies = new Timer(new TimerCallback(OnTimerCallbackReplies), null, Timeout.Infinite, Timeout.Infinite);82 77 } 83 78 … … 115 110 { 116 111 return _clientHost; 117 }118 }119 120 /// <summary>121 ///122 /// </summary>123 /// <param name="stateObject"></param>124 private void OnTimerCallback(Object stateObject)125 {126 RunCallback(_timer, delegate127 {128 SendPing();129 130 // 初回だけは先にチェックしておかないとnamesが後から来てジャマ131 if (_isFirstTime)132 {133 CheckFriends();134 }135 136 // Friendsをチェックするのは成功して、チェックが必要となったとき137 Boolean friendsCheckRequired = false;138 if (CheckNewTimeLine(out friendsCheckRequired) && friendsCheckRequired && !_server.DisableUserList)139 {140 CheckFriends();141 }142 });143 }144 145 /// <summary>146 ///147 /// </summary>148 /// <param name="stateObject"></param>149 private void OnTimerCallbackDirectMessage(Object stateObject)150 {151 RunCallback(_timerDirectMessage, delegate152 {153 CheckDirectMessage();154 });155 }156 157 /// <summary>158 ///159 /// </summary>160 /// <param name="stateObject"></param>161 private void OnTimerCallbackReplies(Object stateObject)162 {163 RunCallback(_timerReplies, delegate164 {165 CheckNewReplies();166 });167 }168 169 /// <summary>170 ///171 /// </summary>172 private delegate void CallbackProcedure();173 174 /// <summary>175 /// タイマーコールバックの処理を実行します。176 /// </summary>177 /// <param name="timer"></param>178 /// <param name="callbackProcedure"></param>179 private void RunCallback(Timer timer, CallbackProcedure callbackProcedure)180 {181 // あまりに処理が遅れると二重になる可能性がある182 if (Monitor.TryEnter(timer))183 {184 try185 {186 callbackProcedure();187 }188 finally189 {190 Monitor.Exit(timer);191 }192 112 } 193 113 } … … 213 133 { 214 134 IRCMessage msg = IRCMessage.CreateMessage(line); 215 OnMessageRec ieved(msg);135 OnMessageReceived(msg); 216 136 } 217 137 catch (IRCException) … … 220 140 } 221 141 } 222 catch (IOException ie)142 catch (IOException) 223 143 {} 224 catch (NullReferenceException ne)144 catch (NullReferenceException) 225 145 {} 226 146 finally … … 233 153 #region イベント実行メソッド 234 154 235 protected virtual void OnMessageRec ieved(IRCMessage msg)236 { 237 if (MessageRec ieved != null)238 { 239 MessageRec ieved(this, new MessageRecievedEventArgs(msg, _writer, _tcpClient));155 protected virtual void OnMessageReceived(IRCMessage msg) 156 { 157 if (MessageReceived != null) 158 { 159 MessageReceived(this, new MessageReceivedEventArgs(msg, _writer, _tcpClient)); 240 160 } 241 161 } … … 245 165 LoadGroups(); 246 166 LoadFilters(); 247 248 // 167 LoadConfig(); 168 169 if (!String.IsNullOrEmpty(_config.IMServiceServerName)) 170 { 171 ConnectToIMService(true); 172 } 173 249 174 if (SessionStarted != null) 250 175 { … … 259 184 { 260 185 // filters 読み取り 261 String path = Path.Combine(ConfigBasePath, Path.Combine(_nick, "Filters.xml")); 262 if (File.Exists(path)) 263 { 264 Trace.WriteLine(String.Format("Load Filters: {0}", path)); 265 try 266 { 267 using (FileStream fs = new FileStream(path, FileMode.Open)) 268 { 269 try 270 { 271 Filters filters = Filters.Serializer.Deserialize(fs) as Filters; 272 if (filters != null) 273 { 274 _filter = filters; 275 foreach (FilterItem item in _filter.Items) 276 { 277 Trace.WriteLine(String.Format(" - Filter:{0}", item.ToString())); 278 } 279 } 280 } 281 catch (XmlException xe) { Trace.WriteLine(xe.Message); } 282 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } 283 } 284 } 285 catch (IOException ie) 286 { 287 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 288 Trace.WriteLine(ie.Message); 289 } 186 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Filters.xml")); 187 try 188 { 189 _filter = Filters.Load(path); 190 } 191 catch (IOException ie) 192 { 193 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 290 194 } 291 195 } … … 295 199 /// </summary> 296 200 private void LoadGroups() 297 {298 // group 読み取り299 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Groups.xml"));300 if (File.Exists(path))301 {302 Trace.WriteLine(String.Format("Load Group: {0}", path));303 try304 {305 using (FileStream fs = new FileStream(path, FileMode.Open))306 {307 try308 {309 Groups groups = Groups.Deserialize(fs);310 _groups = groups;311 312 // 下位互換性FIX: グループに自分自身のNICKは存在しないようにします313 foreach (Group g in groups.Values)314 {315 g.Members.Remove(_nick);316 }317 }318 catch (XmlException xe) { Trace.WriteLine(xe.Message); }319 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); }320 }321 }322 catch (IOException ie)323 {324 SendTwitterGatewayServerMessage("エラー: " + ie.Message);325 Trace.WriteLine(ie.Message);326 }327 }328 }329 /// <summary>330 ///331 /// </summary>332 private void SaveGroups()333 201 { 334 202 // group 読み取り 335 203 lock (_groups) 336 204 { 337 String dir = Path.Combine(ConfigBasePath, _username); 338 String path = Path.Combine(dir, "Groups.xml"); 339 Trace.WriteLine(String.Format("Save Group: {0}", path)); 205 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Groups.xml")); 340 206 try 341 207 { 342 Directory.CreateDirectory(dir); 343 using (FileStream fs = new FileStream(path, FileMode.Create)) 344 { 345 try 346 { 347 _groups.Serialize(fs); 348 } 349 catch (XmlException xe) { Trace.WriteLine(xe.Message); } 350 catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } 208 _groups = Groups.Load(path); 209 210 // 下位互換性FIX: グループに自分自身のNICKは存在しないようにします 211 foreach (Group g in _groups.Values) 212 { 213 g.Members.Remove(_nick); 351 214 } 352 215 } … … 354 217 { 355 218 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 356 Trace.WriteLine(ie.Message); 357 } 358 } 359 } 360 219 } 220 } 221 } 222 /// <summary> 223 /// 224 /// </summary> 225 private void SaveGroups() 226 { 227 // group 読み取り 228 lock (_groups) 229 { 230 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Groups.xml")); 231 try 232 { 233 _groups.Save(path); 234 } 235 catch (IOException ie) 236 { 237 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 238 } 239 } 240 } 241 /// <summary> 242 /// 243 /// </summary> 244 private void LoadConfig() 245 { 246 lock (_config) 247 { 248 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Config.xml")); 249 try 250 { 251 _config = Config.Load(path); 252 } 253 catch (IOException ie) 254 { 255 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 256 } 257 } 258 } 259 /// <summary> 260 /// 261 /// </summary> 262 private void SaveConfig() 263 { 264 lock (_config) 265 { 266 String path = Path.Combine(ConfigBasePath, Path.Combine(_username, "Config.xml")); 267 try 268 { 269 _config.Save(path); 270 } 271 catch (IOException ie) 272 { 273 SendTwitterGatewayServerMessage("エラー: " + ie.Message); 274 } 275 } 276 } 361 277 protected virtual void OnSessionEnded() 362 278 { … … 382 298 383 299 #region メッセージ処理イベント 384 private void MessageRec ieved_JOIN(object sender, MessageRecievedEventArgs e)300 private void MessageReceived_JOIN(object sender, MessageReceivedEventArgs e) 385 301 { 386 302 Trace.WriteLine(e.Message.ToString()); … … 422 338 423 339 // Set topic of client, if topic was set 424 Send(new TopicMessage(channelName, group.Topic)); 340 if (!String.IsNullOrEmpty(group.Topic)) 341 { 342 Send(new TopicMessage(channelName, group.Topic)); 343 } 344 else 345 { 346 SendNumericReply(NumericReply.RPL_NOTOPIC, channelName, "No topic is set"); 347 } 425 348 } 426 349 } 427 350 } 428 351 429 private void MessageRec ieved_PART(object sender, MessageRecievedEventArgs e)352 private void MessageReceived_PART(object sender, MessageReceivedEventArgs e) 430 353 { 431 354 if (!(e.Message is PartMessage)) return;
