/// <summary> /// 接続を開始します。<para /> /// すでに接続が存在する場合は、すでに存在している接続を破棄します。 /// </summary> public static bool RefreshConnection(AccountInfo info) { if (info == null) throw new ArgumentNullException("info", "AccountInfo is not set."); System.Diagnostics.Debug.WriteLine("Refresh connection: " + info.ToString()); UserStreamsConnection ncon; lock (info) { UserStreamsConnection prevCon; // 旧接続の破棄 if (connections.TryGetValue(info, out prevCon)) { connections.Remove(info); if (prevCon != null) prevCon.Dispose(); } // User Streams接続しない設定になっている if (!info.AccountProperty.UseUserStreams) return false; ncon = new UserStreamsConnection(info); if (!connections.TryAdd(info, ncon)) throw new InvalidOperationException("Connection refresh violation."); } var queries = lookupDictionary.Where(v => v.Value == info).Select(v => v.Key).ToArray(); try { ncon.Connect(queries); return true; } catch (Exception e) { connections[info] = null; ncon.Dispose(); ExceptionStorage.Register(e, ExceptionCategory.TwitterError, "User Streams接続に失敗しました。", () => { if (connections.ContainsKey(info) && connections[info] == null) RefreshConnection(info); }); return false; } }