//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public void subscribe(String host, int port, String tableName, MessageHandler handler, long offset) throws java.io.IOException public virtual void subscribe(string host, int port, string tableName, MessageHandler handler, long offset) { BlockingQueue <IList <IMessage> > queue = subscribeInternal(host, port, tableName, offset); lock (queueHandlers) { queueHandlers[tableName2Topic[host + ":" + port + ":" + tableName]] = new QueueHandlerBinder(this, queue, handler); } }
public ThreadPooledClient(string subscribeHost, int subscribePort) : base(subscribeHost, subscribePort) { Dictionary <String, Queue <IMessage> > backlog = new Dictionary <string, Queue <IMessage> >(); bool fillBacklog() { backlog.Clear(); bool filled = false; lock (queueHandlers) { foreach (KeyValuePair <string, QueueHandlerBinder> keyValue in queueHandlers) { if (keyValue.Value.Item1.TryTake(out List <IMessage> messages)) { Queue <IMessage> queue = new Queue <IMessage>(); messages.ForEach(queue.Enqueue); backlog[keyValue.Key] = queue; filled = true; } } } return(filled); } void run() { try { while (!this.isClose()) { foreach (KeyValuePair <String, Queue <IMessage> > keyValue in backlog) { Queue <IMessage> value = keyValue.Value; string topic = keyValue.Key; while (value.Count > 0) { IMessage msg = value.Dequeue(); QueueHandlerBinder binder = null; lock (queueHandlers) { if (queueHandlers.ContainsKey(topic)) { binder = queueHandlers[topic]; HandlerRunner handlerRunner = new HandlerRunner(binder.Item2, msg); ThreadPool.QueueUserWorkItem(new WaitCallback(handlerRunner.run)); } } } } fillBacklog(); } } catch (ThreadInterruptedException) { } Console.WriteLine("ThreadPooledClient thread stopped."); } thread_ = new Thread(new ThreadStart(run)); thread_.Start(); }