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); }
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; }
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); }
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); }
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; } }
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); } } }
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); } }