public BlockingCollection <List <IMessage> > getQueue(string HATopic) { string topic = getTopicForHATopic(HATopic); SubscribeInfo subscribeInfo = null; if (!subscribeInfos_.TryGetValue(topic, out subscribeInfo)) { System.Console.Out.WriteLine("Subscription with topic " + topic + " doesn't exist. "); return(null); } return(subscribeInfo.getQueue()); }
protected BlockingCollection <List <IMessage> > subscribeInternal(string host, int port, string tableName, string actionName, MessageHandler handler, long offset, bool reconnect, IVector filter, bool createSubInfo) { string topic = ""; IEntity re; BlockingCollection <List <IMessage> > queue; DBConnection dbConn = new DBConnection(); dbConn.connect(host, port); try { string localIP = listeningHost_; if (localIP == null || localIP.Equals(String.Empty)) { localIP = dbConn.LocalAddress; } List <IEntity> @params = new List <IEntity> { new BasicString(tableName), new BasicString(actionName) }; re = dbConn.run("getSubscriptionTopic", @params); topic = ((BasicAnyVector)re).getEntity(0).getString(); @params.Clear(); @params.Add(new BasicString(localIP)); @params.Add(new BasicInt(listeningPort_)); @params.Add(new BasicString(tableName)); @params.Add(new BasicString(actionName)); @params.Add(new BasicLong(offset)); if (filter != null) { @params.Add(filter); } re = dbConn.run("publishTable", @params); lock (subscribeInfos_) { if (createSubInfo) { Site[] sites; if (re is BasicAnyVector) { BasicStringVector HASiteStrings = (BasicStringVector)((BasicAnyVector)re).getEntity(1); int HASiteNum = HASiteStrings.rows(); sites = new Site[HASiteNum]; for (int i = 0; i < HASiteNum; ++i) { String HASite = HASiteStrings.get(i).getString(); String[] HASiteHostAndPort = HASite.Split(':'); String HASiteHost = HASiteHostAndPort[0]; int HASitePort = int.Parse(HASiteHostAndPort[1]); String HASiteAlias = HASiteHostAndPort[2]; sites[i] = new Site(HASiteHost, HASitePort); String HATopic = getTopic(HASiteHost, HASitePort, HASiteAlias, tableName, actionName); HATopicToTrueTopic_[HATopic] = topic; } } else { sites = new Site[] { new Site(host, port) }; lock (HATopicToTrueTopic_) { HATopicToTrueTopic_[topic] = topic; } } SubscribeInfo subscribeInfo = new SubscribeInfo(DateTime.Now, new BlockingCollection <List <IMessage> >(), sites, topic, offset, reconnect, filter, handler, tableName, actionName); subscribeInfo.setConnectState(ConnectState.REQUEST); queue = subscribeInfo.getQueue(); if (subscribeInfos_.ContainsKey(topic)) { throw new Exception("Subscription with topic " + topic + " exist. "); } else { subscribeInfos_.TryAdd(topic, subscribeInfo); } Console.WriteLine("Successfully subscribed table " + topic); } else { SubscribeInfo subscribeInfo = null; if (!subscribeInfos_.TryGetValue(topic, out subscribeInfo)) { throw new Exception("Subscription with topic " + topic + " doesn't exist. "); } lock (subscribeInfo) { if (subscribeInfo.getConnectState() == ConnectState.RECEIVED_SCHEMA) { throw new Exception("Subscription with topic " + topic + " the connection has been created. "); } subscribeInfo.setConnectState(ConnectState.REQUEST); } queue = subscribeInfo.getQueue(); } } } finally { dbConn.close(); } return(queue); }