コード例 #1
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
        public StreamingClient(TwitterAccount[] accounts, ulong[] friendIDs, IStreamingHandler target, bool dummy) : this(accounts, target, dummy)
        {
            StreamingUri = StreamingFilterUri;
            if (dummy)
            {
                return;
            }

            ThreadPool.QueueUserWorkItem(delegate(object o) {
                string[] postDatas = new string[accounts.Length];
                for (int j = 0, p = 0; j < accounts.Length; j++, p = Math.Min(friendIDs.Length, p + MaxFollowCount) % friendIDs.Length)
                {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < Math.Min(MaxFollowCount, friendIDs.Length - p); i++)
                    {
                        sb.Append(friendIDs[i + p]);
                        sb.Append(',');
                    }
                    if (sb.Length > 0)
                    {
                        sb.Remove(sb.Length - 1, 1);
                    }
                    _states[j].StreamingPostData = "follow=" + OAuthBase.UrlEncode(sb.ToString());
                }
                StreamingStart();
            });
        }
コード例 #2
0
        public bool Load(ConfigLoadDelegate load, out IStreamingHandler[] targets)
        {
            targets = null;
            if (!File.Exists(ConfigFilePath))
            {
                return(false);
            }
            try {
                JsonObject root = (JsonObject) new JsonValueReader(new StreamReader(ConfigFilePath, System.Text.Encoding.UTF8)).Read();
                if (root.Value.ContainsKey("accounts"))
                {
                    JsonArray        array         = (JsonArray)root.Value["accounts"];
                    JsonArray        accountsArray = array;
                    TwitterAccount[] accounts      = new TwitterAccount[array.Length];
                    for (int i = 0; i < array.Length; i++)
                    {
                        accounts[i] = LoadAccount((JsonObject)array[i]);
                    }
                    UpdateAccounts(accounts);

                    array = (JsonArray)root.Value["searches"];
                    SearchStatuses[] searches = new SearchStatuses[array.Length];
                    for (int i = 0; i < array.Length; i++)
                    {
                        searches[i] = LoadSearch((JsonObject)array[i], accounts);
                    }
                    _searches = searches;

                    if (root.Value.ContainsKey("lists"))
                    {
                        array = (JsonArray)root.Value["lists"];
                        List <ListStatuses> lists = new List <ListStatuses> ();
                        for (int i = 0; i < array.Length; i++)
                        {
                            ListStatuses ls = LoadList((JsonObject)array[i], accounts);
                            if (ls != null)
                            {
                                lists.Add(ls);
                            }
                        }
                        _lists = lists.ToArray();
                    }

                    targets = new IStreamingHandler[accountsArray.Length];
                    for (int i = 0; i < accountsArray.Length; i++)
                    {
                        targets[i] = LoadStreamingTarget((JsonObject)accountsArray[i], accounts, _searches, _lists);
                    }
                    ReconstructAllStreaming(targets, true);
                }
                load(root);
                return(true);
            } catch {
                return(false);
            }
        }
コード例 #3
0
ファイル: StreamingClient.cs プロジェクト: atrandom/ktwt
        public StreamingClient(TwitterAccount account, IStreamingHandler target, bool dummy)
            : this(new TwitterAccount[]{account}, target, dummy)
        {
            if (dummy) return;

            ThreadPool.QueueUserWorkItem (delegate (object o) {
                _states[0].StreamingUri = UserStreamingURL;
                _states[0].HttpMethod = "GET";
                _states[0].StreamingPostData = null;
                StreamingStart ();
            });
        }
コード例 #4
0
        public void ReconstructAllStreaming(IStreamingHandler[] targets, bool dummy)
        {
            if (Accounts.Length != targets.Length)
            {
                throw new ArgumentException();
            }

            CloseAllStreaming();

            Dictionary <IStreamingHandler, List <TwitterAccount> > dic = new Dictionary <IStreamingHandler, List <TwitterAccount> > ();

            for (int i = 0; i < Accounts.Length; i++)
            {
                IStreamingHandler h = targets[i];
                if (h == null)
                {
                    continue;
                }
                List <TwitterAccount> list;
                if (!dic.TryGetValue(h, out list))
                {
                    list = new List <TwitterAccount> ();
                    dic.Add(h, list);
                }
                list.Add(Accounts[i]);
            }
            foreach (KeyValuePair <IStreamingHandler, List <TwitterAccount> > pair in dic)
            {
                TwitterAccount homeTarget   = pair.Key as TwitterAccount;
                SearchStatuses searchTarget = pair.Key as SearchStatuses;
                ListStatuses   listTarget   = pair.Key as ListStatuses;
                if (homeTarget != null)
                {
                    /*ulong[] ids;
                     * try {
                     *      ids = dummy ? null : homeTarget.TwitterClient.FriendIDs;
                     * } catch {
                     *      continue;
                     * }
                     * new StreamingClient (pair.Value.ToArray (), ids, homeTarget, dummy);*/
                    new StreamingClient(homeTarget, homeTarget, dummy);
                }
                else if (searchTarget != null)
                {
                    searchTarget.StreamingClient = new StreamingClient(pair.Value.ToArray(), searchTarget.Keyword, searchTarget, dummy);
                }
                else if (listTarget != null)
                {
                    listTarget.StreamingClient = new StreamingClient(pair.Value.ToArray(), listTarget.Account, listTarget.List, listTarget, dummy);
                }
            }
        }
コード例 #5
0
ファイル: StreamingClient.cs プロジェクト: atrandom/ktwt
        public StreamingClient(TwitterAccount account, IStreamingHandler target, bool dummy) : this(new TwitterAccount[] { account }, target, dummy)
        {
            if (dummy)
            {
                return;
            }

            ThreadPool.QueueUserWorkItem(delegate(object o) {
                _states[0].StreamingUri      = UserStreamingURL;
                _states[0].HttpMethod        = "GET";
                _states[0].StreamingPostData = null;
                StreamingStart();
            });
        }
コード例 #6
0
ファイル: Server.cs プロジェクト: xxlio109/coreclr-module
        public Server(string ip, int port, INetworkingClientPool networkingClientPool, IAuthenticationProviderFactory authenticationProviderFactory, IEntityStreamer streamer,
                      IStreamingHandlerFactory factory)
        {
            var webSocket = new WebSocket();
            var authenticationProvider = authenticationProviderFactory.Create(ip, port, webSocket);
            var streamingHandler       = factory.Create(networkingClientPool, authenticationProvider);

            StreamingHandler                  = streamingHandler;
            webSocket.OnMessageReceived       = streamingHandler.OnMessage;
            webSocket.OnError                 = authenticationProvider.OnError;
            webSocket.OnConnectionEstablished = authenticationProvider.OnConnectionEstablished;
            webSocket.OnConnectionBroken      = authenticationProvider.OnConnectionBroken;
            webSocket.StartListen(port);
        }
コード例 #7
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
        public StreamingClient(TwitterAccount[] accounts, string searchKeywords, IStreamingHandler target, bool dummy) : this(accounts, target, dummy)
        {
            StreamingUri = StreamingFilterUri;
            string postData = "track=" + OAuthBase.UrlEncode(searchKeywords);

            for (int i = 0; i < accounts.Length; i++)
            {
                _states[i].StreamingPostData = postData;
            }
            SearchKeywords = searchKeywords;
            if (!dummy)
            {
                StreamingStart();
            }
        }
コード例 #8
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
 StreamingClient(TwitterAccount[] accounts, IStreamingHandler target, bool dummy)
 {
     Accounts = new TwitterAccount[accounts.Length];
     _states  = new InternalState[accounts.Length];
     for (int i = 0; i < accounts.Length; i++)
     {
         Accounts[i] = accounts[i];
         Accounts[i].StreamingClient = this;
         _states[i] = new InternalState(accounts[i]);
         if (dummy)
         {
             _states[i].ConnectionState = StreamingState.UpdatingFriendList;
         }
     }
     SearchKeywords = string.Empty;
     Target         = target;
 }
コード例 #9
0
ファイル: PreferenceWindow.xaml.cs プロジェクト: kazuki/ktwt
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox          cb       = sender as ComboBox;
            IStreamingHandler selected = cb.SelectedItem as IStreamingHandler;

            if (cb.SelectedItem != null && selected == null)
            {
                cb.SelectedItem = null;
            }
            for (int i = 0; i < _accounts.Length; i++)
            {
                if (_accounts[i] == cb.DataContext)
                {
                    _targets[i] = selected;
                    return;
                }
            }
        }
コード例 #10
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
        public StreamingClient(TwitterAccount[] accounts, ulong[] friendIDs, IStreamingHandler target, bool dummy)
            : this(accounts, target, dummy)
        {
            StreamingUri = StreamingFilterUri;
            if (dummy) return;

            ThreadPool.QueueUserWorkItem (delegate (object o) {
                string[] postDatas = new string[accounts.Length];
                for (int j = 0, p = 0; j < accounts.Length; j++, p = Math.Min (friendIDs.Length, p + MaxFollowCount) % friendIDs.Length) {
                    StringBuilder sb = new StringBuilder ();
                    for (int i = 0; i < Math.Min (MaxFollowCount, friendIDs.Length - p); i++) {
                        sb.Append (friendIDs[i + p]);
                        sb.Append (',');
                    }
                    if (sb.Length > 0)
                        sb.Remove (sb.Length - 1, 1);
                    _states[j].StreamingPostData = "follow=" + OAuthBase.UrlEncode (sb.ToString ());
                }
                StreamingStart ();
            });
        }
コード例 #11
0
ファイル: MainWindow.xaml.cs プロジェクト: kazuki/ktwt
        void InitStreaming(IStreamingHandler[] targets)
        {
            if (targets == null)
                return;

            TwitterAccount[] accounts = _mgr.Accounts;
            ManualResetEvent[] waits = new ManualResetEvent[accounts.Length];
            for (int i = 0; i < accounts.Length; i++) {
                waits[i] = new ManualResetEvent (false);
                ThreadPool.QueueUserWorkItem (delegate (object o1) {
                    object[] ary = (object[])o1;
                    try {
                        (ary[0] as TwitterAccount).TwitterClient.UpdateFriendIDs ();
                    } catch {}
                    (ary[1] as ManualResetEvent).Set ();
                }, new object[] {accounts[i], waits[i]});
            }
            for (int i = 0; i < waits.Length; i ++)
                waits[i].WaitOne ();

            _mgr.ReconstructAllStreaming (targets, false);
            Dispatcher.Invoke (new EmptyDelegate (delegate () {
                foreach (TimelineInfo info in GetAllTimeLineInfo ())
                    info.UpdateStreamingConstruction ();
            }));
        }
コード例 #12
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
        public void Dispose()
        {
            lock (this) {
                if (!_active)
                    return;
                _active = false;
            }

            Target = null;
            for (int i = 0; i < _states.Length; i ++) {
                if (_states[i].Handle != null) {
                    ThreadPool.QueueUserWorkItem (delegate (object o) {
                        try {
                            (o as IDisposable).Dispose ();
                        } catch {}
                    }, _states[i].Handle);
                }
                if (Accounts[i].StreamingClient == this)
                    Accounts[i].StreamingClient = null;
            }
        }
コード例 #13
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
 StreamingClient(TwitterAccount[] accounts, IStreamingHandler target, bool dummy)
 {
     Accounts = new TwitterAccount[accounts.Length];
     _states = new InternalState[accounts.Length];
     for (int i = 0; i < accounts.Length; i ++) {
         Accounts[i] = accounts[i];
         Accounts[i].StreamingClient = this;
         _states[i] = new InternalState (accounts[i]);
         if (dummy)
             _states[i].ConnectionState = StreamingState.UpdatingFriendList;
     }
     SearchKeywords = string.Empty;
     Target = target;
 }
コード例 #14
0
ファイル: StreamingClient.cs プロジェクト: kazuki/ktwt
 public StreamingClient(TwitterAccount[] accounts, string searchKeywords, IStreamingHandler target, bool dummy)
     : this(accounts, target, dummy)
 {
     StreamingUri = StreamingFilterUri;
     string postData = "track=" + OAuthBase.UrlEncode (searchKeywords);
     for (int i = 0; i < accounts.Length; i ++)
         _states[i].StreamingPostData = postData;
     SearchKeywords = searchKeywords;
     if (!dummy)
         StreamingStart ();
 }
コード例 #15
0
ファイル: MainWindow.xaml.cs プロジェクト: kazuki/ktwt
 void Init(IStreamingHandler[] targets)
 {
     InitThreadPoolSetting ();
     ThreadPool.QueueUserWorkItem (delegate (object o) {
         InitUserInfo ();
         InitStreaming (targets);
         InitUserFollowers ();
     });
 }
コード例 #16
0
        public bool Load(ConfigLoadDelegate load, out IStreamingHandler[] targets)
        {
            targets = null;
            if (!File.Exists (ConfigFilePath))
                return false;
            try {
                JsonObject root = (JsonObject)new JsonValueReader (new StreamReader (ConfigFilePath, System.Text.Encoding.UTF8)).Read ();
                if (root.Value.ContainsKey ("accounts")) {
                    JsonArray array = (JsonArray)root.Value["accounts"];
                    JsonArray accountsArray = array;
                    TwitterAccount[] accounts = new TwitterAccount[array.Length];
                    for (int i = 0; i < array.Length; i++)
                        accounts[i] = LoadAccount ((JsonObject)array[i]);
                    UpdateAccounts (accounts);

                    array = (JsonArray)root.Value["searches"];
                    SearchStatuses[] searches = new SearchStatuses[array.Length];
                    for (int i = 0; i < array.Length; i ++)
                        searches[i] = LoadSearch ((JsonObject)array[i], accounts);
                    _searches = searches;

                    if (root.Value.ContainsKey ("lists")) {
                        array = (JsonArray)root.Value["lists"];
                        List<ListStatuses> lists = new List<ListStatuses> ();
                        for (int i = 0; i < array.Length; i++) {
                            ListStatuses ls = LoadList ((JsonObject)array[i], accounts);
                            if (ls != null)
                                lists.Add (ls);
                        }
                        _lists = lists.ToArray ();
                    }

                    targets = new IStreamingHandler[accountsArray.Length];
                    for (int i = 0; i < accountsArray.Length; i ++)
                        targets[i] = LoadStreamingTarget ((JsonObject)accountsArray[i], accounts, _searches, _lists);
                    ReconstructAllStreaming (targets, true);
                }
                load (root);
                return true;
            } catch {
                return false;
            }
        }
コード例 #17
0
        public void ReconstructAllStreaming(IStreamingHandler[] targets, bool dummy)
        {
            if (Accounts.Length != targets.Length)
                throw new ArgumentException ();

            CloseAllStreaming ();

            Dictionary<IStreamingHandler, List<TwitterAccount>> dic = new Dictionary<IStreamingHandler, List<TwitterAccount>> ();
            for (int i = 0; i < Accounts.Length; i++) {
                IStreamingHandler h = targets[i];
                if (h == null)
                    continue;
                List<TwitterAccount> list;
                if (!dic.TryGetValue (h, out list)) {
                    list = new List<TwitterAccount> ();
                    dic.Add (h, list);
                }
                list.Add (Accounts[i]);
            }
            foreach (KeyValuePair<IStreamingHandler, List<TwitterAccount>> pair in dic) {
                TwitterAccount homeTarget = pair.Key as TwitterAccount;
                SearchStatuses searchTarget = pair.Key as SearchStatuses;
                ListStatuses listTarget = pair.Key as ListStatuses;
                if (homeTarget != null) {
                    /*ulong[] ids;
                    try {
                        ids = dummy ? null : homeTarget.TwitterClient.FriendIDs;
                    } catch {
                        continue;
                    }
                    new StreamingClient (pair.Value.ToArray (), ids, homeTarget, dummy);*/
                    new StreamingClient (homeTarget, homeTarget, dummy);
                } else if (searchTarget != null) {
                    searchTarget.StreamingClient = new StreamingClient (pair.Value.ToArray (), searchTarget.Keyword, searchTarget, dummy);
                } else if (listTarget != null) {
                    listTarget.StreamingClient = new StreamingClient (pair.Value.ToArray (), listTarget.Account, listTarget.List, listTarget, dummy);
                }
            }
        }