root/ConcordanceMain.cpp

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. createApplication
  2. main

   1 /* -*- coding: utf-8; mode: c++; -*-
   2  * Concordance to A. S. Pushkin's Works - Main
   3  * $Id: ConcordanceMain.cpp 63 2014-06-21 11:11:33Z isao $
   4  * Copyright (C) 2012, isao yasuda
   5  */
   6 
   7 #include "Concordance.hpp"
   8 #include "ConcordanceConfig.hpp"
   9 
  10 using namespace Wt;
  11 using namespace boost::interprocess;
  12 
  13 // 共有メモリオブジェクト
  14 managed_shared_memory segment1(open_only, SHMCRPS); // Corpus, TitleDB
  15 managed_shared_memory segment2(open_only, SHMTREE); // Word Tree
  16 managed_shared_memory segment3(create_only, SHMWORK, SHMWKSZ); // work
  17 
  18 // 共有メモリリソースアドレス
  19 shmmap_type* corpus_map;      // Corpus map アドレス
  20 shmmap_type* tdb_map;         // TitleDB アドレス
  21 offset_ptr<tree> word_tree_l; // Word Tree Lemmatized form アドレス
  22 offset_ptr<tree> word_tree_a; // Word Tree Appearance form アドレス
  23 
  24 // Wt アプリケーションオブジェクト生成
  25 WApplication* createApplication(const WEnvironment& env)
  26 {
  27     std::cerr << "Concordance createApplication called.\n";
  28     return new Concordance(env);
  29 }
  30 
  31 // コンコーダンスメイン: 全セッションに共通する固定変数を設定する
  32 int main(int argc, char** argv)
  33 {
  34     // 変数マップ
  35     std::map<std::string, std::string> mp;
  36     // 構成ファイル内容を変数マップにロード
  37     config_load(CONFIG, mp);
  38     std::cerr << "Concordance config: " << CONFIG << std::endl;
  39 
  40     // map から共有メモリのハンドルを取得
  41     std::string hc, hd, hl, ha;
  42     hc = mp["CORPUSHDL"];
  43     hd = mp["TITLDBHDL"];
  44     hl = mp["WORDTLHDL"];
  45     ha = mp["WORDTAHDL"];
  46     if (hc.empty()) {
  47         std::cerr << "Corpus Shared Memory Handle not found." << std::endl;
  48         return 1;
  49     }
  50     if (hd.empty()) {
  51         std::cerr << "Title DB Shared Memory Handle not found." << std::endl;
  52         return 1;
  53     }
  54     if (hl.empty()) {
  55         std::cerr << "WordTree Lem Shared Memory Handle not found." <<
  56                   std::endl;
  57         return 1;
  58     }
  59     if (ha.empty()) {
  60         std::cerr << "WordTree App Shared Memory Handle not found." <<
  61                   std::endl;
  62         return 1;
  63     }
  64     // パラメータをエラー(httpd-error.log)出力
  65     std::cerr << "Concordance Configuration parameters: " << std::endl;
  66     for (std::map<std::string, std::string>::iterator it = mp.begin();
  67             it != mp.end(); it++)
  68         std::cerr << "- " << it->first << ":" << it->second << std::endl;
  69 
  70     // locale をセット: ru_RU.UTF-8 でラテン文字の大文字化もできる
  71     boost::locale::generator gen;
  72     std::locale::global(gen("ru_RU.UTF-8"));
  73 
  74     // ハンドルから共有メモリ・リソースのアドレスを取得し,グローバル変数にセット
  75     managed_shared_memory::handle_t handle = 0; // 共有メモリアドレスハンドル
  76     void* vp;                                   // アドレス変換用ポインタ
  77     // Corpus
  78     handle = static_cast<managed_shared_memory::handle_t>
  79              (std::atoi(hc.c_str()));
  80     vp = segment1.get_address_from_handle(handle);
  81     corpus_map = reinterpret_cast<shmmap_type*>(vp);
  82     // TitleDB
  83     handle = static_cast<managed_shared_memory::handle_t>
  84              (std::atoi(hd.c_str()));
  85     vp = segment1.get_address_from_handle(handle);
  86     tdb_map = reinterpret_cast<shmmap_type*>(vp);
  87     // Word Tree Lemmatized form
  88     handle = static_cast<managed_shared_memory::handle_t>
  89              (std::atoi(hl.c_str()));
  90     vp = segment2.get_address_from_handle(handle);
  91     word_tree_l = reinterpret_cast<tree*>(vp);
  92     // Word Tree Appearance form
  93     handle = static_cast<managed_shared_memory::handle_t>
  94              (std::atoi(ha.c_str()));
  95     vp = segment2.get_address_from_handle(handle);
  96     word_tree_a = reinterpret_cast<tree*>(vp);
  97 
  98     // 共有メモリを開始前と終了後に削除するリムーバ
  99     shm_work_remove remover;
 100 
 101     // ワーク共有メモリを確保し,そのオブジェクトを取得
 102     std::cerr << "Concordance Shared Memory Construction." << std::endl;
 103 
 104     // サービス開始
 105     try {
 106         WServer server(argv[0]);
 107         server.setServerConfiguration(argc, argv, "wt_config.xml");
 108         server.addEntryPoint(Application,
 109                              &createApplication,
 110                              "", "images/favicon.ico");
 111         if (server.start()) {
 112             WServer::waitForShutdown();
 113             server.stop();
 114         }
 115     } catch (WServer::Exception& e) {
 116         std::cerr << "WServer exception: " << e.what() << std::endl;
 117     } catch (std::exception &e) {
 118         std::cerr << "exception: " << e.what() << std::endl;
 119     }
 120 }

/* [previous][next][first][last][top][bottom][index][help] */