Пример #1
0
        public void PushMessage_Success()
        {
            RunInitSql("030.PushMessage_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();

            paramsSenderId.SubscriberName = ConfigurationManager.AppSettings["ReceiverName"];
            IMQGetSubscriberIdResult receiverId = mq.GetSubscriberId(paramsSenderId);

            // 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 message
            IMQPushMessageParams paramsPush = mq.CreatePushMessageParams();

            paramsPush.ChannelId   = (long)channelId.ChannelId;
            paramsPush.SenderId    = (long)senderId.SubscriberId;
            paramsPush.MessageType = ConfigurationManager.AppSettings["TestMessageType"];
            paramsPush.Payload     = ConfigurationManager.AppSettings["TestMessagePayload"];
            paramsPush.RecipientId = null;

            var result = mq.PushMessage(paramsPush);

            RunFinalizeSql("030.PushMessage_Success", _conn);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Success);
            Assert.IsEmpty(result.Errors);
            Assert.Greater(result.MessageId, 0);
        }
Пример #2
0
        public bool Push(string channel, string type, string payload, string recipient = null)
        {
            ValidateInitialized();

            long?recId = null;

            if (recipient != null)
            {
                IMQGetSubscriberIdParams paramsGetSubId = _mq.CreateGetSubscriberIdParams();
                paramsGetSubId.SubscriberName = recipient;

                var resRecId = _mq.GetSubscriberId(paramsGetSubId);
                if (resRecId.Success)
                {
                    recId = resRecId.SubscriberId;
                }
            }


            if (_channels.ContainsKey(channel))
            {
                IMQPushMessageParams paramsPush = _mq.CreatePushMessageParams();
                paramsPush.ChannelId   = _channels[channel];
                paramsPush.SenderId    = _subscriberId;
                paramsPush.MessageType = type;
                paramsPush.Payload     = payload;
                paramsPush.RecipientId = recId;

                var resPush = _mq.PushMessage(paramsPush);

                return(resPush.Success);
            }
            else
            {
                return(false);
            }
        }
        public IMQPushMessageResult PushMessage(IMQPushMessageParams paramsPushMsg)
        {
            var result = new DbMQPushMessageResult();

            string        spName = "[SP_Push_Message]";
            SqlConnection conn   = OpenConnection("ConnectionString");

            SqlCommand cmd = new SqlCommand();

            cmd.CommandText = schema + "." + spName;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection  = conn;

            try
            {
                //TODO: add parameters and calls here
                SqlParameter paramChannelId = new SqlParameter("@IN_Channel_Id",
                                                               SqlDbType.BigInt, 0,
                                                               ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current,
                                                               paramsPushMsg.ChannelId);

                SqlParameter paramSenderId = new SqlParameter("@IN_Sender_Id",
                                                              SqlDbType.BigInt, 0,
                                                              ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current,
                                                              paramsPushMsg.SenderId);

                SqlParameter paramRecipientId = new SqlParameter("@IN_Recipient_Id",
                                                                 SqlDbType.BigInt, 0,
                                                                 ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current,
                                                                 paramsPushMsg.RecipientId != null ? (object)paramsPushMsg.RecipientId : DBNull.Value);

                SqlParameter paramMsgType = new SqlParameter("@IN_Message_Type",
                                                             SqlDbType.NVarChar, 255,
                                                             ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current,
                                                             paramsPushMsg.MessageType);

                SqlParameter paramPayload = new SqlParameter("@IN_Payload",
                                                             SqlDbType.NVarChar, -1,
                                                             ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current,
                                                             paramsPushMsg.Payload);

                SqlParameter paramOutMsgId = new SqlParameter("@OUT_Message_Id",
                                                              SqlDbType.BigInt, 0,
                                                              ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Current,
                                                              result.MessageId);


                cmd.Parameters.Add(paramChannelId);
                cmd.Parameters.Add(paramSenderId);
                cmd.Parameters.Add(paramRecipientId);
                cmd.Parameters.Add(paramMsgType);
                cmd.Parameters.Add(paramPayload);
                cmd.Parameters.Add(paramOutMsgId);

                cmd.ExecuteNonQuery();

                result.MessageId = (long)paramOutMsgId.Value;
                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);
        }