private void ListenerThread() { IMQGetChannelMessagesParams paramsGetMsg = _mq.CreateGetChannelMessagesParams(); paramsGetMsg.ReceiverId = _subscriberId; List <long> channels = new List <long>(); while (_isListening) { // waiting for next polling Thread.Sleep(this.PollPeriod); // getting list of channels which currently subscribed to channels.Clear(); lock (_lockChannels) { channels.AddRange(_channels.Values); } // getting messages for each channel foreach (var c in channels) { try { paramsGetMsg.ChannelId = c; var resGetMsg = _mq.GetChannelMessages(paramsGetMsg); if (resGetMsg.Success && resGetMsg.Messages.Count > 0) { OnNewChannelMessages(resGetMsg.Messages); } } catch (Exception ex) { // Ignoring any errors here - just moving to next channel } } } }
public void GetChannelMessages_Success() { RunInitSql("040.GetChannelMessages_Success", _conn); IMessageQueue mq = CreateMQ(); // getting channel ID IMQGetChannelIdParams paramsGetChannelId = mq.CreateGetChannelIdParams(); paramsGetChannelId.ChannelName = ConfigurationManager.AppSettings["ChannelName"]; IMQGetChannelIdResult channelId = mq.GetChannelId(paramsGetChannelId); // getting subscribers ID IMQGetSubscriberIdParams paramsSenderId = mq.CreateGetSubscriberIdParams(); paramsSenderId.SubscriberName = ConfigurationManager.AppSettings["SenderName"]; IMQGetSubscriberIdResult senderId = mq.GetSubscriberId(paramsSenderId); IMQGetSubscriberIdParams paramsRecId = mq.CreateGetSubscriberIdParams(); paramsRecId.SubscriberName = ConfigurationManager.AppSettings["ReceiverName"]; IMQGetSubscriberIdResult receiverId = mq.GetSubscriberId(paramsRecId); // subscribing both IMQSubscribeParams paramSubscribe = mq.CreateSubscribeParams(); paramSubscribe.ChannelId = (long)channelId.ChannelId; paramSubscribe.SubscriberId = (long)senderId.SubscriberId; var subscribeResult = mq.Subscribe(paramSubscribe); paramSubscribe.SubscriberId = (long)receiverId.SubscriberId; subscribeResult = mq.Subscribe(paramSubscribe); // sending 3 messages for (int i = 0; i < 3; ++i) { IMQPushMessageParams paramsPush = mq.CreatePushMessageParams(); paramsPush.ChannelId = (long)channelId.ChannelId; paramsPush.SenderId = (long)senderId.SubscriberId; paramsPush.MessageType = ConfigurationManager.AppSettings["TestMessageType"]; paramsPush.Payload = ConfigurationManager.AppSettings["TestMessagePayload"] + "-" + i; paramsPush.RecipientId = null; var pushRes = mq.PushMessage(paramsPush); } // getting messages IMQGetChannelMessagesParams paramsGetMsgs = mq.CreateGetChannelMessagesParams(); paramsGetMsgs.ChannelId = (long)channelId.ChannelId; paramsGetMsgs.ReceiverId = (long)receiverId.SubscriberId; var result = mq.GetChannelMessages(paramsGetMsgs); RunFinalizeSql("040.GetChannelMessages_Success", _conn); Assert.IsNotNull(result); Assert.IsTrue(result.Success); Assert.IsEmpty(result.Errors); Assert.GreaterOrEqual(result.Messages.Count, 3); }
public IMQGetChannelMessagesResult GetChannelMessages(IMQGetChannelMessagesParams paramsGetMsgs) { var result = new DbMQGetChannelMessagesResult(); string spName = "[SP_Get_Channel_Messages]"; SqlConnection conn = OpenConnection("ConnectionString"); SqlCommand cmd = new SqlCommand(); cmd.CommandText = schema + "." + spName; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; try { SqlParameter paramChannelId = new SqlParameter("@IN_Channel_Id", SqlDbType.BigInt, 0, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current, paramsGetMsgs.ChannelId); SqlParameter paramReceiverId = new SqlParameter("@IN_Receiver_Id", SqlDbType.BigInt, 0, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current, paramsGetMsgs.ReceiverId); cmd.Parameters.Add(paramChannelId); cmd.Parameters.Add(paramReceiverId); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; da.Fill(ds); if (ds.Tables.Count >= 1) { for (int i = 0; i < ds.Tables[0].Rows.Count; ++i) { DataRow r = ds.Tables[0].Rows[i]; MessageDetails md = new MessageDetails(); md.Id = (long)r["Message_Id"]; md.ChannelName = (string)r["Channel_Name"]; md.ChannelId = (long)r["Channel_Id"]; md.Payload = (string)r["Message_Payload"]; md.SenderId = !DBNull.Value.Equals(r["Sender_Id"]) ? (long?)r["Sender_Id"] : null; md.SubscriberId = !DBNull.Value.Equals(r["Subscriber_Id"]) ? (long?)r["Subscriber_Id"] : null; md.Type = (string)r["Message_Type"]; result.Messages.Add(md); } } result.Success = true; } catch (Exception ex) { result.Success = false; result.Errors.Add(new Interfaces.Error() { Message = ex.Message, Code = Interfaces.EErrorCodes.MQDbError, Type = Interfaces.EErrorType.Error }); } conn.Close(); return(result); }