int main(int argc, char *argv[]) { const char *filename = 0; if (argc > 1) { filename = argv[1]; } if (filename == 0) { printf("No filename supplied. Use command line argument to supply one.\n"); return 1; } printf("Reading file from path '%s'.\n", filename); Theron::Framework framework; Theron::ActorRef fileReader(framework.CreateActor<FileReader>()); MessageCollector messageCollector; Theron::Receiver receiver; receiver.RegisterHandler(&messageCollector, &MessageCollector::Handler); // Allocate a buffer for the file data. const unsigned int MAX_FILE_SIZE = 65536; unsigned char fileBuffer[MAX_FILE_SIZE]; // Send the actor a message to request the file read operation. ReadFileMessage readFileMessage; readFileMessage.mFilename = filename; readFileMessage.mBuffer = fileBuffer; readFileMessage.mBufferSize = MAX_FILE_SIZE; fileReader.Push(readFileMessage, receiver.GetAddress()); // Wait for a reply message indicating the file has been read. // This is a blocking call and so prevents this thread from doing // any more work in parallel. In practice it would be better to // call receiver.Count() periodically while doing other work (but // not so often that we busy-wait!). The Count() method is // non-blocking and just returns the number of messages received // but not yet waited for. receiver.Wait(); // Check the returned file size. printf("Read %d bytes\n", messageCollector.mFileMessage.mFileSize); return 0; }
HelloWorld():framework(), qc(), receiver(), queryActor(framework.CreateActor<QueryActor>()) { receiver.RegisterHandler(&qc, &QueryCollector::Handler); std::map<std::string,std::string> queryMap; queryMap.insert(std::make_pair(std::string("dbpath"),std::string("/srv/search/"))); queryMap.insert(std::make_pair(std::string("dbnames"),std::string("news1.db"))); queryMap.insert(std::make_pair(std::string("dicpath"),std::string("/srv/search/"))); queryActor.Push(MapMessage(MapMessage::ATTR,queryMap),receiver.GetAddress()); }