示例#1
0
        public void ToMessageRecord_GoodMessageEntity_MessageRecord()
        {
            Guid userId1 = Guid.NewGuid();
            Guid userId2 = Guid.NewGuid();
            var  message = new MessageEntity
            {
                Text       = "text",
                CreateDate = DateTime.Now,
                SenderId   = userId1,
                Sender     = new UserEntity
                {
                    Id   = userId1,
                    Name = "user1"
                },
                RecipientId = userId2,
                Recipient   = new UserEntity
                {
                    Id   = userId2,
                    Name = "user2"
                }
            };

            MessageRecord result = NotifierConverter.ToMessageRecord(message);

            Assert.Equal(message.Text, result.Text);
            Assert.Equal(message.CreateDate, result.CreateDate);
            Assert.Equal(message.SenderId, result.SenderId);
            Assert.Equal(message.Sender.Id, result.Sender.Id);
            Assert.Equal(message.RecipientId, result.RecipientId);
            Assert.Equal(message.Recipient.Id, result.Recipient.Id);
        }
        /// <summary>
        /// Writes the message to stream.
        /// </summary>
        /// <param name="messageRecord">Message record.</param>
        public void Write(MessageRecord messageRecord)
        {
            var messageBytes = serializer.Serialize(messageRecord.Content);
            var errorBytes   = messageRecord.Error != null?serializer.Serialize(messageRecord.Error) : emptyBytes;

            var dataBytes = messageRecord.Data != null?serializer.Serialize(messageRecord.Data) : emptyBytes;

            lock (objLock)
            {
                WriteChunk(TokenBeginOfCommand);
                WriteChunk(TokenId, messageRecord.Id.ToByteArray());                                        // id
                WriteChunk(TokenType, BitConverter.GetBytes(messageRecord.Type));                           // type
                WriteChunk(TokenContentType, Encoding.UTF8.GetBytes(messageRecord.ContentType));            // message type
                WriteChunk(TokenCreated, BitConverter.GetBytes(messageRecord.CreatedAt.ToBinary()));        // created
                WriteChunk(TokenExecutionDuration, BitConverter.GetBytes(messageRecord.ExecutionDuration)); // completed
                WriteChunk(TokenStatus, BitConverter.GetBytes((byte)messageRecord.Status));                 // status
                if (messageRecord.Error != null)
                {
                    WriteChunk(TokenErrorDetails, errorBytes);                                     // error
                }
                WriteChunk(TokenErrorMessage, Encoding.UTF8.GetBytes(messageRecord.ErrorMessage)); // error message
                WriteChunk(TokenErrorType, Encoding.UTF8.GetBytes(messageRecord.ErrorType));       // error type
                WriteChunk(TokenContent, messageBytes);                                            // message object
                if (messageRecord.Data != null)
                {
                    WriteChunk(TokenData, dataBytes);
                }
                WriteChunk(TokenEndOfCommand);
            }
        }
示例#3
0
文件: ChatForm.cs 项目: zszqwe/dp2
        MessageRecord _lastMessage = null;   // 当前消息显示界面中最后一条消息

        // return:
        //      true    这条记录已经被缓存,暂时不加入显示
        //      false   函数返回后继续处理,加入显示
        bool ProcessEdge(MessageRecord record)
        {
            if (_edgeRecord != null)
            {
                if (record.publishTime == _edgeRecord.publishTime)
                {
                    _edgeRecords.Add(record);
                    return(true);
                }
                // 提取 id 位置后面的
                List <MessageRecord> results = new List <MessageRecord>();
                foreach (MessageRecord r in _edgeRecords)
                {
                    if (r.id == _edgeRecord.id)
                    {
                        results.Clear();
                        continue;
                    }
                    results.Add(r);
                }

                _edgeRecord = null;
                _edgeRecords.Clear();

                // results 加入显示
                FillMessage(results);
            }

            return(false);
        }
示例#4
0
        void FillMessage(MessageRecord record)
        {
            if (this.webBrowser1.InvokeRequired)
            {
                this.webBrowser1.Invoke(new Action <MessageRecord>(FillMessage), record);
                return;
            }

            {
                StringBuilder text = new StringBuilder();
                text.Append("*** " + (_index + 1) + "\r\n");
                _index++;
                text.Append("id=" + record.id + "\r\n");
                text.Append("data=" + record.data + "\r\n");
                if (record.groups != null)
                {
                    text.Append("groups=" + HttpUtility.HtmlEncode(string.Join(",", record.groups)) + "\r\n");
                }
                text.Append("creator=" + record.creator + "\r\n");
                text.Append("userName="******"\r\n");

                text.Append("format=" + record.format + "\r\n");
                text.Append("type=" + record.type + "\r\n");
                text.Append("thread=" + record.thread + "\r\n");

                text.Append("publishTime=" + record.publishTime.ToString("G") + "\r\n");
                text.Append("expireTime=" + record.expireTime + "\r\n");
                AppendHtml(this.webBrowser1, text.ToString());
            }
        }
示例#5
0
文件: ChatForm.cs 项目: zszqwe/dp2
        // 是否为自己发出的消息
        bool IsMe(MessageRecord record)
        {
            if (string.IsNullOrEmpty(Program.MainForm.MessageHub.UserName) == false &&
                record.userName == Program.MainForm.MessageHub.UserName)
            {
                return(true);
            }
            if (string.IsNullOrEmpty(Program.MainForm.MessageHub.UserName))
            {
                string    strParameters      = Program.MainForm.MessageHub.Parameters;
                Hashtable table              = StringUtil.ParseParameters(strParameters, ',', '=', "url");
                string    strLibraryName     = (string)table["libraryName"];
                string    strLibraryUID      = (string)table["libraryUID"];
                string    strLibraryUserName = (string)table["libraryUserName"];

                string strText = strLibraryUserName + "@" + strLibraryName + "|" + strLibraryUID;

                if (CompareUserName(record.creator, "~" + strText) == true)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#6
0
文件: ChatForm.cs 项目: zszqwe/dp2
        void SendMessage(string strGroupName, string strText)
        {
            this.EnableControls(false);

            List <MessageRecord> messages = new List <MessageRecord>();
            MessageRecord        record   = new MessageRecord();

            record.groups = new string [1] {
                strGroupName
            };
            record.data = strText;
            messages.Add(record);

            SetMessageRequest param = new SetMessageRequest("create",
                                                            "",
                                                            messages);

            SetMessageResult result = Program.MainForm.MessageHub.SetMessageAsync(param).Result;

            if (result.Value == -1)
            {
                this.Invoke((Action)(() => MessageBox.Show(this, result.ErrorInfo)));
            }
            else
            {
                // 调用成功后才把输入的文字清除
                this.Invoke((Action)(() => this.textBox_input.Text = ""
                                     ));
            }

            this.EnableControls(true);
        }
示例#7
0
        public int InsertMessageRecordByImgs(MessageRecord record)
        {
            SqlParameter[] sp = new SqlParameter[]
            {
                new SqlParameter("@MID", Guid.NewGuid()),
                new SqlParameter("@MType", record.MType),
                new SqlParameter("@HeadImgUrl", record.HeadImgUrl),
                new SqlParameter("@ImgUserID", record.ImgUserID),
                new SqlParameter("@ImgUrl", record.ImgUrl),
                new SqlParameter("@CreateTime", record.CreateTime),
            };
            var result = Dapper.Helper.SQLHelper.Execute(@"INSERT INTO [dbo].[MessageRecord]
                   ([MID]
                   ,[MType]
                    ,[HeadImgUrl]
                   ,[ImgUserID]
                   ,[ImgUrl]
                   ,[CreateTime])
             VALUES
                   (@MID
                   ,@MType
                    ,@HeadImgUrl
                   ,@ImgUserID
                   ,@ImgUrl
                   ,@CreateTime)", sp, CommandType.Text);

            return(result);
        }
示例#8
0
文件: ChatForm.cs 项目: zszqwe/dp2
        // 如果必要,加入时间提示行
        void AddTimeLine(MessageRecord record)
        {
            DateTime lastTime = new DateTime(0);

            if (_lastMessage != null)
            {
                lastTime = _lastMessage.publishTime;
            }

            if (lastTime.Date != record.publishTime.Date    // 不是同一天
                )
            {
                this.AddTimeLine(record.publishTime.ToString());
                return;
            }

            if (lastTime.Date != record.publishTime.Date ||           // 不是同一天
                lastTime.Hour != record.publishTime.Hour || // 不是同一小时
                record.publishTime - lastTime > new TimeSpan(1, 0, 0) // 和前一条差距超过一个小时
                )
            {
                if (record.publishTime.Date == DateTime.Now.Date)
                {
                    this.AddTimeLine(record.publishTime.ToLongTimeString());    // 今天的时间,显示简略格式
                }
                else
                {
                    this.AddTimeLine(record.publishTime.ToString());
                }
            }
        }
        private void processOutgoingMessageRecord(MessageRecord record)
        {
            var messageDatabase = DatabaseFactory.getMessageDatabase();

            /*MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase());
             * MmsAddressDatabase mmsAddressDatabase = DatabaseFactory.getMmsAddressDatabase();*/

            /*if (messageRecord.isMms())
             * {
             *  mmsDatabase.removeMismatchedIdentity(messageRecord.MismatchedIdentities,
             *                                       mismatch.RecipientId,
             *                                       mismatch.IdentityKey);
             *
             *  var recipients = mmsAddressDatabase.getRecipientsForId(messageRecord.MessageId);
             *
             *  if (recipients.isGroupRecipient()) MessageSender.resendGroupMessage(, masterSecret, messageRecord, mismatch.getRecipientId());
             *  else MessageSender.resend(getContext(), masterSecret, messageRecord);
             * }
             * else {*/
            messageDatabase.RemoveMismatchedIdentity(record.MessageId,
                                                     mismatch.RecipientId,
                                                     mismatch.IdentityKey);

            MessageSender.resend(record);
            // }
        }
        private void processIncomingMessageRecord(MessageRecord record)
        {
            try
            {
                PushDatabase pushDatabase    = DatabaseFactory.getPushDatabase();
                var          messageDatabase = DatabaseFactory.getMessageDatabase();

                messageDatabase.RemoveMismatchedIdentity(record.MessageId,
                                                         mismatch.RecipientId,
                                                         mismatch.IdentityKey);

                SignalServiceEnvelope envelope = new SignalServiceEnvelope((int)SignalServiceProtos.Envelope.Types.Type.PREKEY_BUNDLE,
                                                                           record.IndividualRecipient.getNumber(),
                                                                           (int)record.RecipientDeviceId, "",
                                                                           (long)TimeUtil.GetUnixTimestamp(record.DateSent),
                                                                           Base64.decode(record.Body.Body),
                                                                           null);

                long pushId = pushDatabase.Insert(envelope);

                var task = new PushDecryptTask(pushId, record.MessageId, record.IndividualRecipient.getNumber());
                App.Current.Worker.AddTaskActivities(task);
            }
            catch (IOException e)
            {
                throw new Exception();
            }
        }
示例#11
0
        public void TestEncodeMessageIdentifyCommand()
        {
            MessageRecordDataUInt messageRecordData = new MessageRecordDataUInt(RecordType.UnsignedX0, 0, 0);
            Parameter             parameter         = new Parameter(OpenThingsParameter.IdentifyCommand);
            MessageRecord         messageRecord     = new MessageRecord(parameter, messageRecordData);
            MessageHeader         messageHeader     = new MessageHeader(0, 0, 0, 0x00F3E379);
            Message message = new Message(messageHeader);

            message.Records.Add(messageRecord);

            // Act
            var result = _encoder.Encode(message);

            // Assert
            result
            .Should()
            .NotBeNull()
            .And
            .NotBeEmpty()
            .And
            .ContainInOrder(new List <byte>()
            {
                0x0C, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xE3, 0x79, 0xBF, 0x00, 0x00, 0xE9, 0x4E
            });
        }
示例#12
0
        private bool CheckMsg(MessageRecord msg)
        {
            if (string.IsNullOrEmpty(msg.MessageId) && string.IsNullOrEmpty(msg.ToAddress) && DateTime.MinValue.Equals(msg.MsgData.OrderDate) && string.IsNullOrEmpty(msg.MsgData.OrderName))
            {
                return(false);
            }

            StringBuilder sb = new StringBuilder();

            if (string.IsNullOrEmpty(msg.MessageId))
            {
                sb.AppendLine("订单编号不能为空;");
            }

            if (string.IsNullOrEmpty(msg.MsgData.OrderName))
            {
                sb.AppendLine("商品名称不能为空;");
            }

            if (!ValidateHelper.IsMobile(msg.ToAddress))
            {
                sb.AppendLine("手机号验证失败;");
            }

            if (DateTime.MinValue.Equals(msg.MsgData.OrderDate))
            {
                sb.AppendLine("订单日期验证失败;");
            }

            msg.Remark = sb.ToString();

            return(true);
        }
示例#13
0
        public JsonResult Send(int id)
        {
            ResultRetrun  rmodel = new ResultRetrun();
            MessageRecord data   = msgService.Get(id);

            if (data.SendState == MsgSendState.SendSuccess)
            {
                rmodel.message = "该消息已经发送成功,不能重复发送";
                return(Json(rmodel, JsonRequestBehavior.AllowGet));
            }

            try
            {
                rmodel.isSuccess = msgService.Send(new List <MessageRecord>()
                {
                    data
                }, false);
            }
            catch (BizException biz)
            {
                rmodel.message = biz.Message;
            }
            catch (Exception ex)
            {
                rmodel.message = "操作失败,原因:" + ex.Message;
            }
            return(Json(rmodel, JsonRequestBehavior.AllowGet));
        }
示例#14
0
        public FrmMain()
        {
            InitializeComponent();
            InitList();
            QQMangers  = new Manager();
            _MsgRecord = new MessageRecord();

            QQMangers.AddFriend     += new Action <Data.Friend>(QQMangers_AddFriend);
            QQMangers.ReciveMessage += new Action <string, QQMessageEventArgs>(QQMangers_ReciveMessage);
            QQMangers.SendError     += new Action <string, string, string>(QQMangers_SendError);
            QQMangers.AddFatherQQ   += QQMangers_AddFatherQQ;

            FriendList.DoubleClickSubItem += new ChatListBox.ChatListEventHandler(FriendList_DoubleClickSubItem);
            FriendList.ContextSubItem     += new ChatListBox.ChatListEventHandler(FriendList_ContextSubItem);


            MajorFriendList.DoubleClickSubItem += new ChatListBox.ChatListEventHandler(MajorFriendList_DoubleClickSubItem);
            MajorFriendList.ContextSubItem     += new ChatListBox.ChatListEventHandler(MajorFriendList_ContextSubItem);

            searchBox1.SearchClick += new EventHandler(searchBox1_SearchClick);

            searchBox1.Box.SelectedIndexChanged += new EventHandler(Box1_SelectedIndexChanged);
            searchBox1.Box.DisplayMember         = "NicName";

            searchBox2.SearchClick += new EventHandler(searchBox2_SearchClick);
            searchBox2.Box.SelectedIndexChanged += new EventHandler(Box2_SelectedIndexChanged);
            searchBox2.Box.DisplayMember         = "NicName";
        }
示例#15
0
        protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            try
            {
                var messageDeets = new MessageRecord();
                messageDeets.MessageTime = turnContext.Activity.Timestamp.ToString();
                messageDeets.MesageText  = turnContext.Activity.Text;
                messageDeets.MessageFrom = turnContext.Activity.From.Name;
                messageDeets.MessageTo   = turnContext.Activity.Recipient.Name;

                var changes = new Dictionary <string, object>();
                {
                    changes.Add("MessageRecords", messageDeets);
                }


                await MyStorage.WriteAsync(changes, cancellationToken);

                await turnContext.SendActivityAsync($"Your message was saved");
            }

            catch
            {
                await turnContext.SendActivityAsync($"Your message was all f****d up");
            }
        }
示例#16
0
        /// <summary>
        /// Handle the session events.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        public static void HandleSessionEvent(Object sender, SessionEventArgs args)
        {
            Console.WriteLine(string.Format("HandleSessionEvent - {0}", args.ToString()));
            switch (args.Event)
            {
            case SessionEvent.Acknowledgement:
            case SessionEvent.RejectedMessageError:
                MessageRecord mr = args.CorrelationKey as MessageRecord;
                if (mr != null)
                {
                    mr.Acked = true;
                    if (args.Event == SessionEvent.Acknowledgement)
                    {
                        mr.Accepted = true;
                    }
                    else if (args.Event == SessionEvent.RejectedMessageError)
                    {
                        mr.Accepted = false;
                    }
                }
                break;

            default:
                break;
            }
        }
示例#17
0
        public JsonResult Add(MsgViewModel model)
        {
            ResultRetrun rmodel = new ResultRetrun();

            if (!ValidateHelper.IsDateTime(model.OrderDate))
            {
                rmodel.message = "订单日期输入有误";
            }

            if (ModelState.IsValid)
            {
                MessageRecord msgModel = new MessageRecord()
                {
                    MessageId  = model.Number,
                    OperatorId = UserId,
                    SendState  = MsgSendState.Unsent,
                    ToAddress  = model.Phone,
                    MsgData    = new MsgDataInfo()
                    {
                        OrderDate = Convert.ToDateTime(model.OrderDate), OrderName = model.OrderName
                    }
                };
                rmodel.isSuccess = msgService.Add(msgModel);
            }

            return(Json(rmodel));
        }
示例#18
0
 // main thread onry
 public void PushMessage(MessageRecord rc)
 {
     lock (MessageQueue)
     {
         MessageQueue.Enqueue(rc);
     }
 }
        /// <inheritdoc />
        public Task AddAsync(MessageRecord messageRecord, CancellationToken cancellationToken)
        {
            if (disposed)
            {
                throw new ObjectDisposedException("The repository has been disposed.");
            }

            lock (SyncRoot)
            {
                string name = GetAvailableFileNameByDate(currentFileStream, DateTime.Now);
                if (currentFileStream == null || System.IO.Path.GetFileName(currentFileStream.Name) != name)
                {
                    Close();
                    currentFileStream = new FileStream(System.IO.Path.Combine(Path, name), FileMode.Append);
                }
                WriteToFile(messageRecord);
            }

            if (!BufferStream)
            {
                lock (SyncRoot)
                {
                    currentFileStream.Flush();
                }
            }

            return(completedTask);
        }
        private void WriteToFile(MessageRecord message)
        {
            var jsonBytes = Serializer.Serialize(message);

            currentFileStream.Write(jsonBytes, 0, jsonBytes.Length);
            currentFileStream.Write(newLine, 0, newLine.Length);
        }
        public async Task AddAsync(MessageRecord messageRecord, CancellationToken cancellationToken)
        {
            if (disposed)
            {
                throw new ObjectDisposedException(nameof(AdoNetMessageRepository));
            }
            if (!isInitialized)
            {
                lock (objLock)
                {
                    Init(cancellationToken);
                }
                isInitialized = true;
            }

            DbConnection connection = null;

            try
            {
                connection = GetConnection();
                await ExecuteAddMessageCommandAsync(connection, messageRecord, cancellationToken).ConfigureAwait(false);
            }
            finally
            {
                if (!KeepConnection && connection != null)
                {
                    connection.Close();
                    connection = null;
                }
            }
        }
示例#22
0
        public void Can_run_query_from_raw_message()
        {
            // Arrange
            pipelineService.ServiceProvider = new FuncServiceProvider(InterfacesResolver);
            SetupQueryPipeline(pipelineService.PipelineContainer.AddQueryPipeline());
            var messageRecord = new MessageRecord
            {
                ContentType = "Saritasa.Tools.Messages.Tests.QueriesTests+QueryObject.SimpleQueryWithDependency," +
                              "Saritasa.Tools.Messages.Tests",
                Content = new Dictionary <string, object>
                {
                    ["a"]           = 10,
                    ["b"]           = 20,
                    ["dependencyB"] = null,
                }
            };

            // Act
            var queryPipeline  = pipelineService.GetPipelineOfType <IQueryPipeline>();
            var queryConverter = pipelineService.GetPipelineOfType <IQueryPipeline>() as IMessageRecordConverter;
            var messageContext = queryConverter.CreateMessageContext(pipelineService, messageRecord);

            queryPipeline.Invoke(messageContext);

            // Assert
            Assert.IsType <List <int> >(messageContext.GetResult <object>());
        }
        /// <summary>
        /// Create message record from message context.
        /// </summary>
        /// <param name="messageContext">Message context.</param>
        /// <returns>Message record.</returns>
        public static MessageRecord Create(IMessageContext messageContext)
        {
            var    messageRecord = new MessageRecord();
            object val;

            messageRecord.Id = messageContext.Id;
            if (messageContext.Items.TryGetValue(MessageContextConstants.TypeKey, out object type))
            {
                messageRecord.Type = (byte)type;
            }
            messageRecord.Content     = messageContext.Content;
            messageRecord.ContentType = messageContext.ContentId;
            messageRecord.Status      = messageContext.Status;
            if (messageContext.Items.TryGetValue(MessageContextConstants.DataKey, out val))
            {
                messageRecord.Data = (IDictionary <string, string>)val;
            }
            messageRecord.Error        = messageContext.FailException;
            messageRecord.ErrorType    = TypeHelpers.GetPartiallyAssemblyQualifiedName(messageContext.FailException?.GetType());
            messageRecord.ErrorMessage = messageContext.FailException?.Message ?? string.Empty;
            if (messageContext.Items.TryGetValue(MessageContextConstants.ExecutionDurationKey, out val))
            {
                messageRecord.ExecutionDuration = (int)val;
            }
            return(messageRecord);
        }
示例#24
0
 public static string GetTitle(this MessageRecord record)
 {
     if (record.Type == "Sms")
     {
         return(record.Body);
     }
     else if (record.Type == "Email")
     {
         var subject = record.GetPropertyValue("Subject");
         if (subject != null)
         {
             return(subject);
         }
     }
     else if (record.Provider == "RegistrationActivationLetter")
     {
         return($"Activation Letter: {record.Body}");
     }
     else if (record.Type == "Inbox")
     {
         var obj = JObject.Parse(record.Body);
         return($"Inbox: { (string)obj["Type"]}");
     }
     else if (record.Type == "WorkItem")
     {
         return($"{record.GetPropertyValue("WorkItemId")} - {record.GetPropertyValue("System_Title")}");
     }
     return($"Unknown Type {record.Id:N}");
 }
示例#25
0
        public void NotifySendMessage(MessageRecord message)
        {
            string objectForSendJson = JsonConvert.SerializeObject(message);

            _hub.Invoke(ServerSettings.SendMessageMethodName, message.RecipientId.Value.ToString(), objectForSendJson).Wait();
            //InvokeServiceMethod(ServerSettings.SendMessageMethodName, message.RecipientId.Value, message);
        }
        public async Task <IEnumerable <MessageRecord> > GetAsync(MessageQuery messageQuery,
                                                                  CancellationToken cancellationToken)
        {
            if (disposed)
            {
                throw new ObjectDisposedException(nameof(AdoNetMessageRepository));
            }

            // Execute.
            var messages   = new List <MessageRecord>();
            var connection = GetConnection();

            using (var command = connection.CreateCommand())
            {
                command.CommandText    = queryProvider.GetFilterScript(messageQuery);
                command.CommandTimeout = 120; // Set timeout to 2 mins since query may take long time.
                using (var reader = await command.ExecuteReaderAsync(cancellationToken))
                {
                    while (await reader.ReadAsync(cancellationToken))
                    {
                        var messageRecord = new MessageRecord
                        {
                            Type        = reader.GetByte(1),
                            Id          = reader.GetGuid(2),
                            ContentType = reader.GetString(3)
                        };
                        var content     = serializer.IsText ? Encoding.UTF8.GetBytes(reader.GetString(4)) : (byte[])reader[4];
                        var contentType = Type.GetType(messageRecord.ContentType);
                        messageRecord.Content = serializer.Deserialize(content, contentType);
                        if (!reader.IsDBNull(5))
                        {
                            messageRecord.Data = serializer.Deserialize(
                                Encoding.UTF8.GetBytes(reader.GetString(5)), typeof(IDictionary <string, string>))
                                                 as IDictionary <string, string>;
                        }
                        if (!reader.IsDBNull(7) && !reader.IsDBNull(8))
                        {
                            messageRecord.ErrorMessage = reader.GetString(7);
                            messageRecord.ErrorType    = reader.GetString(8);
                            var errorType = Type.GetType(messageRecord.ErrorType);
                            if (!reader.IsDBNull(6) && !string.IsNullOrEmpty(messageRecord.ErrorType))
                            {
                                var error = serializer.IsText ? Encoding.UTF8.GetBytes(reader.GetString(6)) : (byte[])reader[6];
                                if (error.Length > 0)
                                {
                                    messageRecord.Error = serializer.Deserialize(error, errorType) as Exception;
                                }
                            }
                        }
                        messageRecord.CreatedAt         = reader.GetDateTime(9);
                        messageRecord.ExecutionDuration = reader.GetInt32(10);
                        messageRecord.Status            = (ProcessingStatus)reader.GetByte(11);

                        messages.Add(messageRecord);
                    }
                }
            }

            return(messages);
        }
示例#27
0
 public static string GetPropertyValue(this MessageRecord record, string name)
 {
     if (record.Properties.ContainsKey(name))
     {
         return(record.Properties[name]);
     }
     return(null);
 }
 /// <inheritdoc />
 public Task AddAsync(MessageRecord message, CancellationToken cancellationToken)
 {
     lock (objLock)
     {
         Messages.Add(message);
     }
     return completedTask;
 }
示例#29
0
        /// <inheritdoc/>
        public Task DisplayAlert(string title, string message)
        {
            MessageRecord record = new MessageRecord(title, message, null, null);

            this.messageQueue.Enqueue(record);
            StartDisplay();
            return(record.CompletionSource.Task);
        }
示例#30
0
        /// <inheritdoc/>
        public Task <bool> DisplayAlert(string title, string message, string accept, string cancel)
        {
            MessageRecord record = new MessageRecord(title, message, accept, cancel);

            this.messageQueue.Enqueue(record);
            StartDisplay();
            return(record.CompletionSource.Task);
        }
示例#31
0
文件: ChatForm.cs 项目: renyh1013/dp2
        void SendMessage(string strGroupName, string strText)
        {
            this.EnableControls(false);

            List<MessageRecord> messages = new List<MessageRecord>();
            MessageRecord record = new MessageRecord();
            record.groups = new string [1] {strGroupName};
            record.data = strText;
            messages.Add(record);

            SetMessageRequest param = new SetMessageRequest("create",
                "",
               messages);

            SetMessageResult result = this.MainForm.MessageHub.SetMessageAsync(param).Result;
            if (result.Value == -1)
            {
                this.Invoke((Action)(() => MessageBox.Show(this, result.ErrorInfo)));
            }
            else
            {
                // 调用成功后才把输入的文字清除
                this.Invoke((Action)(() => this.textBox_input.Text = ""
                    ));
            }

            this.EnableControls(true);
        }
示例#32
0
文件: ChatForm.cs 项目: renyh1013/dp2
        // 如果必要,加入时间提示行
        void AddTimeLine(MessageRecord record)
        {
            DateTime lastTime = new DateTime(0);
            if (_lastMessage != null)
                lastTime = _lastMessage.publishTime;

            if (lastTime.Date != record.publishTime.Date    // 不是同一天
    )
            {
                this.AddTimeLine(record.publishTime.ToString());
                return;
            }

            if (lastTime.Date != record.publishTime.Date    // 不是同一天
                || lastTime.Hour != record.publishTime.Hour // 不是同一小时
                || record.publishTime - lastTime > new TimeSpan(1, 0, 0)    // 和前一条差距超过一个小时
            )
            {
                if (record.publishTime.Date == DateTime.Now.Date)
                    this.AddTimeLine(record.publishTime.ToLongTimeString());    // 今天的时间,显示简略格式
                else
                    this.AddTimeLine(record.publishTime.ToString());
            }
        }
示例#33
0
文件: ChatForm.cs 项目: renyh1013/dp2
        // 回调函数,用消息填充浏览器控件
        void FillMessage(long totalCount,
    long start,
    IList<MessageRecord> records,
    string errorInfo,
    string errorCode)
        {
            if (this.webBrowser1.InvokeRequired)
            {
                this.webBrowser1.Invoke(new Action<long, long, IList<MessageRecord>, string, string>(FillMessage),
                    totalCount, start, records, errorInfo, errorCode);
                return;
            }

            if (records != null)
            {
                foreach (MessageRecord record in records)
                {
                    if (ProcessEdge(record))
                        continue;


#if NO
                    AddTimeLine(record);
                    // creator 要替换为用户名
                    this.AddMessageLine(
                        IsMe(record) ? "right" : "left",
                        string.IsNullOrEmpty(record.userName) ? record.creator : record.userName,
                        record.data);
#endif
                    List<MessageRecord> temp = new List<MessageRecord>() { record };
                    FillMessage(temp);

                    _lastMessage = record;
                }
            }
        }
示例#34
0
文件: ChatForm.cs 项目: renyh1013/dp2
        void FillMessage(IList<MessageRecord> records)
        {
            if (records != null)
            {
                foreach (MessageRecord record in records)
                {
                    AddTimeLine(record);

                    // creator 要替换为用户名
                    this.AddMessageLine(
                        IsMe(record) ? "right" : "left",
                        string.IsNullOrEmpty(record.userName) ? GetShortUserName(record.creator) : record.userName,
                        record.data);

                    _lastMessage = record;
                }
            }
        }
示例#35
0
文件: ChatForm.cs 项目: renyh1013/dp2
        MessageRecord _lastMessage = null;   // 当前消息显示界面中最后一条消息

        // return:
        //      true    这条记录已经被缓存,暂时不加入显示
        //      false   函数返回后继续处理,加入显示
        bool ProcessEdge(MessageRecord record)
        {
            if (_edgeRecord != null)
            {
                if (record.publishTime == _edgeRecord.publishTime)
                {
                    _edgeRecords.Add(record);
                    return true;
                }
                // 提取 id 位置后面的
                List<MessageRecord> results = new List<MessageRecord>();
                foreach (MessageRecord r in _edgeRecords)
                {
                    if (r.id == _edgeRecord.id)
                    {
                        results.Clear();
                        continue;
                    }
                    results.Add(r);
                }

                _edgeRecord = null;
                _edgeRecords.Clear();

                // results 加入显示
                FillMessage(results);
            }

            return false;
        }
示例#36
0
文件: ChatForm.cs 项目: renyh1013/dp2
        // 是否为自己发出的消息
        bool IsMe(MessageRecord record)
        {
            if (string.IsNullOrEmpty(this.MainForm.MessageHub.UserName) == false
                && record.userName == this.MainForm.MessageHub.UserName)
                return true;
            if (string.IsNullOrEmpty(this.MainForm.MessageHub.UserName))
            {
                string strParameters = this.MainForm.MessageHub.Parameters;
                Hashtable table = StringUtil.ParseParameters(strParameters, ',', '=', "url");
                string strLibraryName = (string)table["libraryName"];
                string strLibraryUID = (string)table["libraryUID"];
                string strLibraryUserName = (string)table["libraryUserName"];

                string strText = strLibraryUserName + "@" + strLibraryName + "|" +strLibraryUID;

                if (CompareUserName(record.creator,"~" + strText) == true)
                    return true;
            }

            return false;
        }