public override ITargettedMessageSet <IBlockchainEventsRehydrationFactory> RehydrateMessage(IByteArray data, TargettedHeader header, IBlockchainEventsRehydrationFactory rehydrationFactory) { IDataRehydrator dr = DataSerializationFactory.CreateRehydrator(data); IByteArray messageBytes = NetworkMessageSet.ExtractMessageBytes(dr); NetworkMessageSet.ResetAfterHeader(dr); IDataRehydrator messageRehydrator = DataSerializationFactory.CreateRehydrator(messageBytes); short workflowType = messageRehydrator.ReadShort(); if (workflowType == 0) { throw new ApplicationException("Invalid workflow type"); } switch (workflowType) { case NeuraliumWorkflowIDs.TEST: return(new TestFactory((BlockchainServiceSet)this.serviceSet).RehydrateMessage(data, header, rehydrationFactory)); // default: // throw new ApplicationException("Workflow message factory not found"); } return(base.RehydrateMessage(data, header, rehydrationFactory)); }
public override ITargettedMessageSet <IBlockchainEventsRehydrationFactory> RehydrateMessage(IByteArray data, TargettedHeader header, IBlockchainEventsRehydrationFactory rehydrationFactory) { IDataRehydrator dr = DataSerializationFactory.CreateRehydrator(data); IByteArray messageBytes = NetworkMessageSet.ExtractMessageBytes(dr); NetworkMessageSet.ResetAfterHeader(dr); IDataRehydrator messageRehydrator = DataSerializationFactory.CreateRehydrator(messageBytes); IBlockchainTargettedMessageSet messageSet = null; try { if (data?.Length == 0) { throw new ApplicationException("null message"); } short workflowType = 0; ComponentVersion <SimpleUShort> version = null; messageRehydrator.Peek(rehydrator => { workflowType = rehydrator.ReadShort(); if (workflowType != NeuraliumWorkflowIDs.TEST) { throw new ApplicationException("Invalid workflow type"); } version = rehydrator.Rehydrate <ComponentVersion <SimpleUShort> >(); }); switch (version.Type.Value) { case MESS1: if (version == (1, 0)) { messageSet = this.CreateTestWorkflowTriggerSet(header); } break; case MESS2: if (version == (1, 0)) { messageSet = this.CreateServerAnswerSet(header); } break; default: throw new ApplicationException("invalid message type"); } if (messageSet?.BaseMessage == null) { throw new ApplicationException("Invalid message type or version"); } messageSet.BaseHeader = header; // set the header explicitely messageSet.RehydrateRest(dr, rehydrationFactory); } catch (Exception ex) { Log.Error(ex, "Invalid data sent"); } return(messageSet); }