Example #1
0
        private IList Batch(DataMessage dataMessage)
        {
            ArrayList result       = new ArrayList();
            IList     messageBatch = dataMessage.body as IList;

            for (int i = 0; i < messageBatch.Count; i++)
            {
                IMessage message = messageBatch[i] as IMessage;
                try {
                    if (message is UpdateCollectionMessage)
                    {
                        result.Add(UpdateCollection(message as UpdateCollectionMessage, messageBatch));
                    }
                    else
                    {
                        object obj = Invoke(message);
                        result.Add(obj);
                    }
                } catch (DataSyncException dataSyncException) {
                    DataErrorMessage dataErrorMessage = dataSyncException.GetErrorMessage() as DataErrorMessage;
                    dataErrorMessage.cause         = message as DataMessage;
                    dataErrorMessage.correlationId = message.messageId;
                    dataErrorMessage.destination   = message.destination;
                    result.Add(dataErrorMessage);
                } catch (Exception exception) {
                    MessageException messageException = new MessageException(exception);
                    ErrorMessage     errorMessage     = messageException.GetErrorMessage();
                    errorMessage.correlationId = message.messageId;
                    errorMessage.destination   = message.destination;
                    result.Add(errorMessage);
                }
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// Clients can call this method to commit the transaction. You should only use this method if
        /// you used the begin method to create the DataServiceTransaction.
        /// Otherwise, the gateway will commit or rollback the transaction as necessary.
        /// </summary>
        public void Commit()
        {
            if (_rollbackOnly)
            {
                Rollback();
                return;
            }

            try {
                ProcessRefreshFills();

                _pushMessages = new ArrayList();
                for (int i = 0; i < _processedMessageBatches.Count; i++)
                {
                    MessageBatch messageBatch = _processedMessageBatches[i] as MessageBatch;
                    if (messageBatch.Messages != null && messageBatch.Messages.Count > 0)
                    {
                        DataDestination dataDestination = _dataService.GetDestination(messageBatch.IncomingMessage) as DataDestination;
                        try {
                            dataDestination.SequenceManager.ManageMessageBatch(messageBatch, this);
                        } catch (Exception ex) {
                            MessageException messageException = new MessageException(ex);
                            ErrorMessage     errorMessage     = messageException.GetErrorMessage();
                            errorMessage.correlationId = messageBatch.IncomingMessage.messageId;
                            errorMessage.destination   = messageBatch.IncomingMessage.destination;
                            messageBatch.Messages.Clear();
                            messageBatch.Messages.Add(errorMessage);
                        }
                        for (int j = 0; j < messageBatch.Messages.Count; j++)
                        {
                            IMessage message = messageBatch.Messages[j] as IMessage;

                            if (!(message is ErrorMessage))
                            {
                                _pushMessages.Add(message);
                            }
                        }
                    }
                    _outgoingMessages.AddRange(messageBatch.Messages);
                }

                for (int i = 0; i < _pushMessages.Count; i++)
                {
                    IMessage    message     = _pushMessages[i] as IMessage;
                    DataMessage dataMessage = message as DataMessage;
                    if (dataMessage != null)
                    {
                        PushMessage(GetSubscribers(message), message);
                    }
                }
                foreach (DictionaryEntry entry in _clientUpdateCollectionMessages)
                {
                    UpdateCollectionMessage updateCollectionMessage = entry.Value as UpdateCollectionMessage;
                    _outgoingMessages.Add(updateCollectionMessage);
                    PushMessage(GetSubscribers(updateCollectionMessage), updateCollectionMessage);
                }
                foreach (DictionaryEntry entry in _updateCollectionMessages)
                {
                    UpdateCollectionMessage updateCollectionMessage = entry.Value as UpdateCollectionMessage;
                    _outgoingMessages.Add(updateCollectionMessage);
                    PushMessage(GetSubscribers(updateCollectionMessage), updateCollectionMessage);
                }
            } finally {
                _transactionState = TransactionState.Committed;
            }
        }