예제 #1
0
        public static string AddMessageDetailFromBatch(MessageBatch model)
        {
            MessageSysDAL dal   = new MessageSysDAL();
            string        reMsg = "";

            List <int> accIdList = CommonLib.Helper.JsonDeserializeObject <List <int> >(model.AccIdSet);

            foreach (var accid in accIdList)
            {
                MessageDetail tempModel = new MessageDetail();
                tempModel.AccId       = accid;
                tempModel.BatchId     = model.BatchId;
                tempModel.ChannelId   = model.ChannelId;
                tempModel.Content     = model.Content;
                tempModel.CreateTime  = DateTime.Now;
                tempModel.Remark      = model.Remark;
                tempModel.Title       = model.Title;
                tempModel.ArriveMark  = 0;
                tempModel.OpenMark    = 0;
                tempModel.ContentType = model.ContentType;
                tempModel.ContentUrl  = model.ContentUrl;

                tempModel.AccIdNumber = T_AccountBLL.GetAccountNumber(model.ChannelId, accid);
                string tMsg = AddMessageDetail(tempModel);
                if (tMsg != "成功")
                {
                    reMsg += tMsg;
                }
            }

            return(reMsg);
        }
        internal static MessageBatch getMessageBatch(this RemoteDeliver rd)
        {
            var envelopes      = new List <Remote.MessageEnvelope>();
            var typeNames      = new Dictionary <string, int>();
            var targetNames    = new Dictionary <string, int>();
            var typeNameList   = new List <string>();
            var targetNameList = new List <string>();

            var targetName   = rd.Target.Id;
            var serializerId = rd.SerializerId == -1 ? Serialization.DefaultSerializerId : rd.SerializerId;

            if (!targetNames.TryGetValue(targetName, out var targetId))
            {
                targetId = targetNames[targetName] = targetNames.Count;
                targetNameList.Add(targetName);
            }

            var typeName = Serialization.GetTypeName(rd.Message, serializerId);

            if (!typeNames.TryGetValue(typeName, out var typeId))
            {
                typeId = typeNames[typeName] = typeNames.Count;
                typeNameList.Add(typeName);
            }

            Remote.MessageHeader header = null;
            if (rd.Header != null && rd.Header.Count > 0)
            {
                header = new Remote.MessageHeader();
                header.HeaderData.Add(rd.Header.ToDictionary());
            }

            var bytes    = Serialization.Serialize(rd.Message, serializerId);
            var envelope = new Remote.MessageEnvelope
            {
                MessageData   = bytes,
                Sender        = rd.Sender,
                Target        = targetId,
                TypeId        = typeId,
                SerializerId  = serializerId,
                MessageHeader = header,
            };

            envelopes.Add(envelope);

            var batch = new MessageBatch();

            batch.TargetNames.AddRange(targetNameList);
            batch.TypeNames.AddRange(typeNameList);
            batch.Envelopes.AddRange(envelopes);

            return(batch);
        }
예제 #3
0
        public MessageBatch MessagesBatch(IEnumerable <NetworkMessage> messages)
        {
            var batch = new MessageBatch
            {
                MessageId = GenerateMessageId(),
                Content   = ByteString.CopyFrom(new MessageBatchContent {
                    Messages = { messages }
                }.ToByteArray()),
                Sender = _keyPair.PublicKey,
            };

            batch.Signature = Crypto.Sign(batch.Content.ToArray(), _keyPair.PrivateKey.Encode(), true).ToSignature(true);
            return(batch);
        }
예제 #4
0
파일: Account.cs 프로젝트: malevy/Barker
        private async Task UpdateSubscribers(object arg)
        {
            var messages = new MessageBatch(_receivedMessages.ToArray());

            var allSubscriptionHandles = await _clientStream.GetAllSubscriptionHandles();

            if (allSubscriptionHandles.Count == 0)
            {
                this.GetLogger().Verbose("no client subscribers");
            }

            await _clientStream.OnNextAsync(messages);
            _receivedMessages.Clear();
        }
        public void PersistResultsToFile(MessageBatch batch)
        {
            //sanity check we don't have
            if (batch.Messages == null || batch.Messages.Count == 0)
            {
                throw new Exception("You're asking me to save an empty file Mr President, that's not supposed to happen");
            }

            using (StreamWriter file = File.CreateText(ConstructFileName(batch)))
            {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(file, batch.Messages);
            }
        }
예제 #6
0
        /// <summary>
        /// 插入批次信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public int AddMessageBatch(MessageBatch model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append(
                "insert into MessageBatch (BatchId,AccIdSet,AccIdCount,ConditionDesc,SourceType," +
                "FilterLogVerify,CreateTime,ReviewState,SendingStatus,FeedBackArrive,FeedBackOpen," +
                "ChannelId,Title,Content,Remark,Operator,ContentType,ContentUrl) " +
                "Values(@BatchId,@AccIdSet,@AccIdCount,@ConditionDesc,@SourceType,@FilterLogVerify," +
                "@CreateTime,@ReviewState,@SendingStatus,@FeedBackArrive,@FeedBackOpen,@ChannelId," +
                "@Title,@Content,@Remark,@Operator,@ContentType,@ContentUrl);");

            try
            {
                int reVal = DapperHelper.Execute(strSql.ToString(), new
                {
                    BatchId         = model.BatchId,
                    AccIdSet        = model.AccIdSet,
                    AccIdCount      = model.AccIdCount,
                    ConditionDesc   = "",
                    SourceType      = model.SourceType,
                    FilterLogVerify = model.FilterLogVerify,
                    CreateTime      = DateTime.Now,
                    ReviewState     = 0,
                    SendingStatus   = 0,
                    FeedBackArrive  = 0,
                    FeedBackOpen    = 0,
                    ChannelId       = model.ChannelId,
                    Title           = model.Title,
                    Content         = model.Content,
                    Remark          = model.Remark,
                    Operator        = model.Operator,
                    ContentType     = model.ContentType,
                    ContentUrl      = model.ContentUrl
                });

                return(reVal);
            }
            catch (Exception ex)
            {
                Logger.Error("插入消息批次" + model.BatchId + "出错", ex);
                return(0);
            }
        }
예제 #7
0
        public static string AddMessageBatch(MessageBatch model)
        {
            MessageSysDAL dal       = new MessageSysDAL();
            int           batchMark = dal.AddMessageBatch(model);
            string        msg       = "";

            if (batchMark != 0)
            {
                //string reMsg = AddMessageDetailFromBatch(model);
                msg += "消息提交成功!";
                //为该批次消息添加发送详情队列

                return(msg + AddMessageDetailFromBatch(model));
            }
            else
            {
                return("发送渠道ID为" + model.ChannelId + "的消息批次" + model.BatchId + "添加失败");
            }
        }
예제 #8
0
        public static string GenerateBatchByChannel(int channelId, string accIdSet, int accIdCount, int sourceType, string filterVerify, string title, string content, string remark, string batchId, string contentType = "", string contentUrl = "")
        {
            MessageBatch batchModel = new MessageBatch();

            batchModel.AccIdCount      = accIdCount;
            batchModel.AccIdSet        = accIdSet;
            batchModel.BatchId         = batchId;
            batchModel.ChannelId       = channelId;
            batchModel.Content         = content;
            batchModel.CreateTime      = DateTime.Now;
            batchModel.Remark          = remark;
            batchModel.Title           = title;
            batchModel.ReviewState     = 0;
            batchModel.SendingStatus   = 0;
            batchModel.SourceType      = sourceType;
            batchModel.FilterLogVerify = filterVerify;
            batchModel.ContentType     = contentType;
            batchModel.ContentUrl      = contentUrl;

            return(MessageSysBLL.AddMessageBatch(batchModel));
        }
 public List <MyMessage> ReadResultsFromFile(MessageBatch batch)
 {
     try
     {
         //TODO output more useful info liek the filename
         using (FileStream stream = new FileStream(ConstructFileName(batch), FileMode.Open))
             using (StreamReader file = new StreamReader(stream))
             {
                 JsonSerializer serializer = new JsonSerializer();
                 ITraceWriter   writer     = new MemoryTraceWriter();
                 serializer.TraceWriter = writer;
                 var messages = (List <MyMessage>)serializer.Deserialize(file, typeof(List <MyMessage>));
                 _logger.LogDebug("Read {0} objects from file", messages.Count);
                 return(messages);
             }
     }
     catch (Exception e)
     {
         //TODO handle exceptions
     }
     return(null);
 }
        async Task <MessageBatch> GetOutlookDataAsync(MessageBatch messageBatch)
        {
            if (!messageBatch.RetrievedFromCache)
            {
                //get them from the API
                var outlookData = await _graphService.RetrieveBatch(messageBatch.StartDate, messageBatch.EndDate);

                if (outlookData.Count == 0)
                {
                    return(messageBatch);
                }
                //convert them into a data format we actually can use, and persist

                //TODO - put this in a proper converter
                messageBatch.Messages = outlookData.Select(m => new MyMessage {
                    OutlookMessage = m
                }).ToList();
                _logger.LogInformation($"Retrieved {outlookData.Count} messages from Microsoft");

                messageBatch.Save();
            }
            else
            {
                //TODO implement a way to disable automatically loading from a cache
                _logger.LogDebug("Loaded this batch from a previous file. Turn off caching if you didn't want this");

                var howManyMessagesAreAlreadyProcessed = messageBatch.ConfirmedMigrationStatus.Count;
                if (howManyMessagesAreAlreadyProcessed > 1)
                {
                    _logger.LogInformation("Found {0} of these message have already been processed, leaving {1} messages to find information on", howManyMessagesAreAlreadyProcessed, messageBatch.Messages.Count - howManyMessagesAreAlreadyProcessed);
                }
                else
                {
                    _logger.LogInformation($"Doesn't look like we'd previously processed any of these. Going ahead with {messageBatch.Messages.Count} messages to find information on");
                }
            }
            return(messageBatch);
        }
예제 #11
0
        private void Bind()
        {
            _logger.LogTrace($"Connecting to inbound endpoint '{_endpoint.Name}'...");

            _settings.Validate();

            if (_settings.Batch.Size > 1)
            {
                var batch = new MessageBatch(
                    _settings.Batch,
                    _messagesHandler,
                    Commit,
                    _rollbackHandler,
                    _errorPolicy,
                    _serviceProvider);

                _consumer.Received += (_, args) => batch.AddMessage(CreateInboundMessage(args));
            }
            else
            {
                _consumer.Received += (_, args) => ProcessSingleMessage(CreateInboundMessage(args));
            }
        }
        private MessageBatch MatchToGmailData(MessageBatch messageBatch)
        {
            //TODO given we have to make n calls to Gmail API, one for each message, let's at least batch them shall we?

            int i = 0;

            foreach (var message in messageBatch.UnconfirmedMigrationStatus)
            {
                try
                {
                    var  gmailId   = _gmailService.FindMessageByRFC822(message.OutlookMessage.InternetMessageId.Replace("<", "").Replace(">", ""));
                    bool isInGmail = !String.IsNullOrWhiteSpace(gmailId);

                    message.IsMigratedToGmail = isInGmail;

                    if (isInGmail)
                    {
                        message.GmailId = gmailId;
                    }
                }
                catch (Exception e)
                {
                    _logger.LogWarning(String.Format("Couldn't retrieve id {0} from Gmail (date: {1}, subject: {2}). Error was {3}", message.OutlookMessage.InternetMessageId, message.OutlookMessage.SentDateTime, message.OutlookMessage.Subject, e.Message));
                }
                finally
                {
                    i++;
                    if (i % 100 == 0)
                    {
                        _logger.LogDebug("Retriving Gmail information for messages {0}00 and onwards", i / 100);
                    }
                }
            }
            _logger.LogInformation(messageBatch.ToString());
            return(messageBatch);
        }
예제 #13
0
 protected override void setup()
 {
     _batch = new MessageBatch();
 }
예제 #14
0
 protected override void setup()
 {
     _batch = new MessageBatch();
 }
 private string ConstructFileName(MessageBatch batch)
 {
     return(String.Format(@"Office365DataStore-{0}-{1}.json", batch.StartDate.ToString("yyyy-MM-dd"), batch.EndDate.ToString("yyyy-MM-dd")));
 }
 public bool LocalFileExists(MessageBatch batch)
 {
     return(File.Exists(ConstructFileName(batch)));
 }