コード例 #1
0
int main(int argc, const char** argv)
{
    //MamaQueue* mDefaultQueue = NULL;

    const char* symbol = "";
    const char* source = "";
    const char* middleware = "";
    const char* transportname = "";
    const char* output_filename = "";
    const char* symbol_filename = "";
    GzFileHandler* gzfh = NULL;
    set<string> all_symbols;

    int i = 1;

    for (i = 1; i < argc;)
    {
        if (strcmp (argv[i], "-S") == 0)
        {
            source = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-tport") == 0)
        {
            transportname = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-f") == 0)
        {
            char sbuf[128];
            symbol_filename = argv[i + 1];
            i += 2;
            FILE *sfile = fopen(symbol_filename, "r");
            while(fgets(sbuf, 128, sfile) != NULL)
            {
                char* nl_find = strchr(sbuf, '\n');
                if(nl_find != NULL)
                    *nl_find = '\0';
                string str = sbuf;
                all_symbols.insert(sbuf);
            }
        }
        else if (strcmp (argv[i], "-s") == 0)
        {
            symbol = argv[i + 1];
            i += 2;
            all_symbols.insert(symbol);
        }
        else if (strcmp (argv[i], "-m") == 0)
        {
            middleware = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-o") == 0)
        {
            output_filename = argv[i + 1];
            i += 2;
        }
    }

    gzfh = new GzFileHandler(output_filename, GZ_FILE_HANDLER_WRITE);
    t_rmsc = new RecordingMamaSubscriptionCallback(gzfh);
    int number_threads = 1;

    // Load all required bridges at this point
    mBridgeImpl = Mama::loadBridge (middleware);

    // Open up the MAMA api
    Mama::open ();

    Mama::enableLogging (MAMA_LOG_LEVEL_NORMAL, stderr);
    MamaQueue* mDefaultQueue = Mama::getDefaultEventQueue (mBridgeImpl);
    transport = new MamaTransport;
    transport->create(transportname, mBridgeImpl);
    set<string>::iterator it;
    MamaSource* mDictSource = new MamaSource ("WOMBAT", transport, "WOMBAT");

    DictionaryCallback cb (mBridgeImpl);
    MamaDictionary* mDictionary = new MamaDictionary;
    mDictionary->create (mDefaultQueue, &cb, mDictSource, 3, 10);
    Mama::start (mBridgeImpl);
    printf("Writing Dictionary...\n");
    mDictionary->writeToFile("/home/frank/wush/fquinn/openmamacapture/data.dict");
    mQueueGroup = new MamaQueueGroup (number_threads, mBridgeImpl);

    for(it = all_symbols.begin(); it != all_symbols.end(); it++)
    {
        printf("Setting up MAMA Subscription for %s\n", (*it).c_str());
        MamaSubscription* sub = new MamaSubscription;
        mVectorMamaSubscription.push_back(sub);
        sub->create (transport, mQueueGroup->getNextQueue (), (RecordingMamaSubscriptionCallback*)t_rmsc,
                 source, (*it).c_str(), NULL);
    }
    signal(SIGINT, cleanup);
    printf("Starting...\n");
    Mama::start(mBridgeImpl);
}