コード例 #1
0
        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
                    }
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }