コード例 #1
0
        public SequencedMessage GetSequencedMessage(DataMessage dataMessage, Sequence sequence)
        {
            if ((dataMessage.headers != null) && dataMessage.headers.ContainsKey("pageSize"))
            {
                return(this.GetPagedMessage(dataMessage, sequence));
            }
            SequencedMessage message = new SequencedMessage {
                destination  = dataMessage.destination,
                sequenceId   = sequence.Id,
                sequenceSize = sequence.Size
            };

            object[] objArray = new object[sequence.Count];
            lock (_objLock)
            {
                for (int i = 0; i < sequence.Count; i++)
                {
                    ItemWrapper item = this.GetItem(sequence[i]);
                    if (item != null)
                    {
                        objArray[i] = item.Instance;
                    }
                }
            }
            message.body            = objArray;
            message.sequenceProxies = null;
            message.dataMessage     = dataMessage;
            message.messageId       = dataMessage.messageId;
            message.clientId        = dataMessage.clientId;
            message.correlationId   = dataMessage.messageId;
            return(message);
        }
コード例 #2
0
        public SequencedMessage GetPageItems(DataMessage dataMessage)
        {
            int      sequenceId = (int)dataMessage.headers["sequenceId"];
            Sequence sequence   = this.GetSequence(sequenceId);

            if (sequence != null)
            {
                IList            list     = dataMessage.headers["DSids"] as IList;
                SequencedMessage message  = new SequencedMessage();
                object[]         objArray = new object[list.Count];
                lock (_objLock)
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        Identity    identity = new Identity(list[i] as IDictionary);
                        ItemWrapper item     = this.GetItem(identity);
                        objArray[i] = item.Instance;
                    }
                    message.destination     = dataMessage.destination;
                    message.sequenceId      = sequence.Id;
                    message.sequenceSize    = sequence.Size;
                    message.sequenceProxies = null;
                    message.body            = objArray;
                }
                return(message);
            }
            DataServiceException exception = new DataServiceException(string.Format("Sequence {0} in destination {1} was not found", sequenceId, dataMessage.destination));

            throw exception;
        }
コード例 #3
0
ファイル: DataService.cs プロジェクト: tawmuller/fluorinefx
        private AcknowledgeMessage ExecuteGetSequenceIdOperation(IMessage message)
        {
            DataMessage        dataMessage     = message as DataMessage;
            AcknowledgeMessage responseMessage = null;
            DataDestination    dataDestination = this.GetDestination(dataMessage) as DataDestination;

            //2 cases: body set or identity set
            if (dataMessage.body != null && dataMessage.body is IList)
            {
                dataMessage.operation = DataMessage.FillOperation;
                IList result = dataDestination.ServiceAdapter.Invoke(message) as IList;//Fill returns an IList
                responseMessage       = dataDestination.SequenceManager.ManageSequence(dataMessage, result);
                dataMessage.operation = DataMessage.GetSequenceIdOperation;
            }
            else
            {
                dataMessage.operation = DataMessage.GetOperation;
                object result = dataDestination.ServiceAdapter.Invoke(message);
                if (result != null)
                {
                    ArrayList collection = new ArrayList(1);
                    collection.Add(result);
                    responseMessage = dataDestination.SequenceManager.ManageSequence(dataMessage, collection);
                }
                else
                {
                    SequencedMessage sequencedMessage = new SequencedMessage();
                    sequencedMessage.sequenceId = -1;//no sequence
                    responseMessage             = sequencedMessage;
                }
                dataMessage.operation = DataMessage.GetSequenceIdOperation;
            }
            return(responseMessage);
        }
コード例 #4
0
ファイル: DataService.cs プロジェクト: Joy011024/PickUpData
        private AcknowledgeMessage ExecuteGetSequenceIdOperation(IMessage message)
        {
            DataMessage        message2    = message as DataMessage;
            AcknowledgeMessage message3    = null;
            DataDestination    destination = base.GetDestination(message2) as DataDestination;

            if ((message2.body != null) && (message2.body is IList))
            {
                message2.operation = 1;
                IList items = destination.ServiceAdapter.Invoke(message) as IList;
                message3           = destination.SequenceManager.ManageSequence(message2, items);
                message2.operation = 12;
                return(message3);
            }
            message2.operation = 2;
            object obj2 = destination.ServiceAdapter.Invoke(message);

            if (obj2 != null)
            {
                ArrayList list2 = new ArrayList(1);
                list2.Add(obj2);
                message3 = destination.SequenceManager.ManageSequence(message2, list2);
            }
            else
            {
                SequencedMessage message4 = new SequencedMessage {
                    sequenceId = -1
                };
                message3 = message4;
            }
            message2.operation = 12;
            return(message3);
        }
コード例 #5
0
        public SequencedMessage GetPageItems(DataMessage dataMessage)
        {
            int      sequenceId = (int)dataMessage.headers[DataMessage.SequenceIdHeader];
            Sequence sequence   = GetSequence(sequenceId);

            if (sequence != null)
            {
                IList DSids = dataMessage.headers["DSids"] as IList;
                //ArrayList items = new ArrayList(DSids.Count);
                SequencedMessage sequencedMessage = new SequencedMessage();
                object[]         items            = new object[DSids.Count];
                lock (_objLock) {
                    for (int i = 0; i < DSids.Count; i++)
                    {
                        Identity    identity    = new Identity(DSids[i] as IDictionary);
                        ItemWrapper itemWrapper = GetItem(identity);
                        //items.Add(item);
                        items[i] = itemWrapper.Instance;
                    }

                    sequencedMessage.destination     = dataMessage.destination;
                    sequencedMessage.sequenceId      = sequence.Id;
                    sequencedMessage.sequenceSize    = sequence.Size;
                    sequencedMessage.sequenceProxies = null;

                    sequencedMessage.body = items;
                }
                return(sequencedMessage);
            }
            else
            {
                DataServiceException dse = new DataServiceException(string.Format("Sequence {0} in destination {1} was not found", sequenceId, dataMessage.destination));
                throw dse;
            }
        }
コード例 #6
0
        public void ManageMessageBatch(MessageBatch messageBatch, DataServiceTransaction dataServiceTransaction)
        {
            DataMessage dataMessage = messageBatch.IncomingMessage;

            //Manage existing sequences
            for (int j = 0; j < messageBatch.Messages.Count; j++)
            {
                IMessage message = messageBatch.Messages[j] as IMessage;
                if (message is UpdateCollectionMessage)
                {
                    UpdateCollectionMessage updateCollectionMessage = message as UpdateCollectionMessage;
                    //update collections, fix sequences
                    IList    fillParameters = updateCollectionMessage.collectionId as IList;
                    Sequence sequence       = _dataDestination.SequenceManager.GetSequence(fillParameters);
                    if (sequence != null)
                    {
                        ApplyUpdateCollectionMessage(sequence, updateCollectionMessage);
                    }
                }
            }
            for (int j = 0; j < messageBatch.Messages.Count; j++)
            {
                DataMessage dataMessageTmp = messageBatch.Messages[j] as DataMessage;
                if (dataMessageTmp != null)
                {
                    switch (dataMessageTmp.operation)
                    {
                    case DataMessage.CreateAndSequenceOperation:
                    {
                        //dataMessage.identity contains identity
                        //dataMessage.body contains the object
                        IList result = new ArrayList();
                        result.Add(dataMessageTmp.body);
                        //Will generate an UpdateCollectionMessage too (server adding item to collection)
                        Sequence         sequence         = this.CreateSequence(dataMessageTmp.clientId as string, result, null, dataServiceTransaction);
                        SequencedMessage sequencedMessage = this.GetSequencedMessage(dataMessageTmp, sequence);
                        messageBatch.Messages[j] = sequencedMessage;
                    }
                    break;
                    }
                }
            }
            for (int j = 0; j < messageBatch.Messages.Count; j++)
            {
                if (messageBatch.Messages[j] is DataMessage)
                {
                    DataMessage dataMessageTmp = messageBatch.Messages[j] as DataMessage;
                    SyncSequenceChanges(dataMessageTmp, dataServiceTransaction);
                }
                if (messageBatch.Messages[j] is SequencedMessage)
                {
                    SequencedMessage sequencedMessage = messageBatch.Messages[j] as SequencedMessage;
                    DataMessage      dataMessageTmp   = sequencedMessage.dataMessage;
                    SyncSequenceChanges(dataMessageTmp, dataServiceTransaction);
                }
            }
        }
コード例 #7
0
        public SequencedMessage GetSequencedMessage(DataMessage dataMessage, Sequence sequence)
        {
            if (dataMessage.headers != null && dataMessage.headers.ContainsKey(DataMessage.PageSizeHeader))
            {
                return(GetPagedMessage(dataMessage, sequence));
            }
            else
            {
                SequencedMessage sequencedMessage = new SequencedMessage();
                sequencedMessage.destination  = dataMessage.destination;
                sequencedMessage.sequenceId   = sequence.Id;
                sequencedMessage.sequenceSize = sequence.Size;
                //object[] body = new object[result.Count];
                //result.CopyTo(body, 0);
                object[] body = new object[sequence.Count];
                lock (_objLock)
                {
                    for (int i = 0; i < sequence.Count; i++)
                    {
                        ItemWrapper itemWrapper = GetItem(sequence[i]) as ItemWrapper;
                        if (itemWrapper != null)
                        {
                            body[i] = itemWrapper.Instance;
                        }
                    }
                }
                sequencedMessage.body            = body;
                sequencedMessage.sequenceProxies = null;
                sequencedMessage.dataMessage     = dataMessage;

                sequencedMessage.messageId     = dataMessage.messageId;
                sequencedMessage.clientId      = dataMessage.clientId;
                sequencedMessage.correlationId = dataMessage.messageId;
                //dataMessage.identity = new Hashtable(0);

                return(sequencedMessage);
            }
        }