diff --git a/app/ship_processor.go b/app/ship_processor.go index c2fde70..8db05a1 100644 --- a/app/ship_processor.go +++ b/app/ship_processor.go @@ -43,6 +43,9 @@ type ShipProcessor struct { // Encoder used to encode messages encode message.Encoder + // Function for saving state. + saver StateSaver + // Internal state state State @@ -51,18 +54,18 @@ type ShipProcessor struct { } // SpawnProcessor creates a new ShipProccessor that consumes the shipclient.Stream passed to it. -func SpawnProccessor(shipStream *shipclient.Stream, writer api.Writer, abi *abi.AbiManager, codec message.Codec) *ShipProcessor { +func SpawnProccessor(shipStream *shipclient.Stream, loader StateLoader, saver StateSaver, writer api.Writer, abi *abi.AbiManager, codec message.Codec) *ShipProcessor { processor := &ShipProcessor{ + saver: saver, abi: abi, writer: writer, shipStream: shipStream, encode: logDecoratedEncoder(codec.Encoder), syscontract: eos.AccountName("eosio"), - state: State{ - CurrentBlock: shipStream.StartBlock, - }, } + loader(&processor.state) + // Attach handlers shipStream.BlockHandler = processor.processBlock @@ -274,6 +277,11 @@ func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) { if err != nil { log.WithError(err).Error("Failed to send messages") } + + err = processor.saver(processor.state) + if err != nil { + log.WithError(err).Error("Failed to save state") + } } // Close closes the writer associated with the processor.