Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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());
            
            
        }