So I have more C++ to relearn. I had to remember how to pass by reference and update same. I reworked the code to move all the hard coding to the routine and thus hid all of it.
Here is a bit of the main now:
int main() { // Print a header of execution out auto result = std::time(nullptr); std::cout << "Start: Master Control Program " << std::endl; std::cout << "Local Time: " << std::asctime(std::localtime(&result)) << std::endl; // Get running values std::string versionnumber, storedirectory, sharedirectory, UUID[10]; MCPParms ourparms("MCP.xml"); // parms for program try { ourparms.load(); } catch (std::exception const& ex) { std::cout << ex.what() << std::endl; return (1); } ourparms.version(versionnumber); // Write out version number std::cout << "File version: " << versionnumber << std::endl; ourparms.UUID(UUID); // write out UUID of starting value std::cout << "UUID " << UUID[0] << std::endl; ourparms.store(storedirectory); ourparms.share(sharedirectory); int client = ourparms.client(); std::cout << "Client " << client; if (client == 0) { std::cout << " Primary!"; } std::cout << std::endl; std::cout << "Store: " << storedirectory << std::endl; std::cout << "Share: " << sharedirectory << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // Shutdown result = std::time(nullptr); std::cout << "Exit: Master Control Program " << std::endl; std::cout << "Local Time: " << std::asctime(std::localtime(&result)) << std::endl; // Leave politely return 0; }
I have left the open of the file to be a try/except as I think it would hard to handle it in the constructor. I have moved the getting of values to methods.
That code looks like this (please notice the one bit of crazy C++ code that is obscure):
void MCPParms::version(std::string &myversion) { myversion = this->get("mcp.version"); return; } void MCPParms::UUID(std::string myUUID[10]) { myUUID[0] = this->get("UUID.0"); myUUID[1] = this->get("UUID.1"); myUUID[2] = this->get("UUID.2"); myUUID[3] = this->get("UUID.3"); myUUID[4] = this->get("UUID.4"); myUUID[5] = this->get("UUID.5"); myUUID[6] = this->get("UUID.6"); myUUID[7] = this->get("UUID.7"); myUUID[8] = this->get("UUID.8"); myUUID[9] = this->get("UUID.9"); return; } void MCPParms::store(std::string &mystore) { mystore = this->get("mcp.store"); return; } void MCPParms::share(std::string &myshare) { myshare = this->get("mcp.share"); return; } int MCPParms::client() /* You would think this would be easy. But no. Here is the logic I used.... Broke it in steps to be clear */ { std::string myclientstr = this->get("mcp.client"); int myclient = atoi(myclientstr.c_str()); // Crazy C++ code return myclient; }
The spacing is better in the code. I am tired of trying to align this stuff in WordPress!
So we have added the needed items to begin the next step, actually passing files. I intend to have a file appear in the share directory, process it, accept it, move it to the store directory, and send back an acknowledgment. That is the next step. I am having trouble finding a way to get a list of files in a directory and information on the files. It appears that this is not available in C++11 that I am using. I will keep digging.
We are about to step out into the interesting bits. I hope to at least have code that can see files next time.
I forgot to add that I wrote a program to create the XML file. That is how I get all the values into the file. When I get this running the file will be create once and then copied to the various systems with different client numbers.