Exemple #1
0
        /// <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);
            }
        }
 /// <summary>
 /// 接続を開始します。<para />
 /// すでに接続が存在する場合は、すでに存在している接続を破棄します。
 /// </summary>
 public static bool RefreshConnection(AccountInfo info)
 {
     if (info == null)
         throw new ArgumentNullException("info", "AccountInfo is not set.");
     var ncon = new UserStreamsConnection(info);
     if (connections.ContainsKey(info))
     {
         var pcon = connections[info];
         // 以前の接続がある
         connections[info] = ncon;
         if (pcon != null)
             pcon.Dispose();
     }
     else
     {
         connections.AddOrUpdate(info, ncon);
     }
     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;
     }
 }
Exemple #3
0
        /// <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;
            }
        }