diff --git a/plugins/remotefortressreader.cpp b/plugins/remotefortressreader.cpp index fb7c55c45..411b0b646 100644 --- a/plugins/remotefortressreader.cpp +++ b/plugins/remotefortressreader.cpp @@ -37,8 +37,8 @@ #include "modules/Materials.h" #include "TileTypes.h" -//Needed for writing the protobuff stuff to a file. #include +#include #include "RemoteFortressReader.pb.h" @@ -54,6 +54,7 @@ using namespace std; static command_result GetMaterialList(color_ostream &stream, const EmptyMessage *in, MaterialList *out); static command_result GetBlockList(color_ostream &stream, const BlockRequest *in, BlockList *out); +static command_result CheckHashes(color_ostream &stream, const EmptyMessage *in); void CopyBlock(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetBlock); void FindChangedBlocks(); @@ -84,6 +85,7 @@ DFhackCExport RPCService *plugin_rpcconnect(color_ostream &) RPCService *svc = new RPCService(); svc->addFunction("GetMaterialList", GetMaterialList); svc->addFunction("GetBlockList", GetBlockList); + svc->addFunction("CheckHashes", CheckHashes); return svc; } @@ -115,6 +117,20 @@ uint16_t fletcher16(uint8_t const *data, size_t bytes) return sum2 << 8 | sum1; } +static command_result CheckHashes(color_ostream &stream, const EmptyMessage *in) +{ + clock_t start = clock(); + for (int i = 0; i < df::global::world->map.map_blocks.size(); i++) + { + df::map_block * block = df::global::world->map.map_blocks[i]; + fletcher16((uint8_t*)(block->tiletype), 16 * 16 * sizeof(df::enums::tiletype::tiletype)); + } + clock_t end = clock(); + double elapsed_secs = double(end - start) / CLOCKS_PER_SEC; + stream.print("Checking all hashes took %f seconds.", elapsed_secs); + return CR_OK; +} + df::matter_state GetState(df::material * mat, uint16_t temp = 10015) { df::matter_state state = matter_state::Solid;