Ejemplo n.º 1
0
 LinuxThread(ThreadMethod entry, void* args) {
     if (pthread_create(&this->_thread, NULL, entry, args)) {
         std::cout << "ERROR: pthread_create failed" << std::endl;
     }
     
     this->_uuid = GenerateUUID();
 }
Ejemplo n.º 2
0
StoreStatus ServerIndex::AddInstance(std::string publicID, std::string patientName,
                            std::string studyID, std::string seriesID)
{
    boost::mutex::scoped_lock lock(mutex_);
    std::string privateID = GenerateUUID();
    InstanceNode* node = new InstanceNode(privateID, publicID, patientName, studyID, seriesID);
    ServerIndexNodes[publicID] = node;

    return StoreStatus_Success;
}
Ejemplo n.º 3
0
int TextHandler::build_text_result_file(const TextID & tid, const bool is_bilingual, string & result_file_name)
{
    int ret = SUCCESS;

    //从数据库读取翻译结果
    vector<boost::tuple<string, string, string, size_t> > result_vec;
    string file_type;
    string tgt_language;

    ret = DBOperation::GetTransResult(tid, result_vec, file_type, tgt_language);

    CLanguage::EnLowercase(file_type);

    if(SUCCESS != ret)
    {
        return ERR_GET_TGT_VEC_FROM_DB;
    }

    //后处理辅助翻译的修改结果
    bool is_english = (LANGUAGE_ENGLISH == tgt_language ) ? true : false;
    for(size_t i=0; i<result_vec.size(); ++i)
    {
        string & modify_tgt = result_vec[i].get<1>();
        if(modify_tgt.size() > 0)
        {
            if(is_english)
                CLanguage::Ch2EnPost(modify_tgt);
            else
                CLanguage::En2ChPost(modify_tgt);
        }
    }

    //返回的result_vec顺序由DBOperation保证,根据SentID大小决定

    //生成结果文件
    string build_id = GenerateUUID();
    string base_result_file_path;
    string result_text;
    bool is_blank_between_sent = (LANGUAGE_ENGLISH == tgt_language ) ? true : false;

    if( SUCCESS != (ret = build_base_result_file(tid, build_id, result_vec, is_blank_between_sent, is_bilingual, base_result_file_path, result_text)) )
        return ret;

    return build_txt_result_file(tid, build_id, result_text, result_file_name);
}
Ejemplo n.º 4
0
int main()
{
    const char *uuid = GenerateUUID();
//    printf("uuid: %s\n", uuid);
    
    char *memory;
    int fd = shm_open(uuid, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR/*, 0666*/);
    
    if(fd == -1) {
        perror("shm_open");
        return 1;
    }
    
    int fdflags = fcntl(fd, F_GETFD);
    if (fdflags & FD_CLOEXEC)
    {
        fdflags &= ~FD_CLOEXEC;
        fcntl(fd, F_SETFD, fdflags);
    }
    
    size_t shmSize = sizeof(container);
    shmSize += sizeof(size_t);  // we need to save main memory size at the head.
    
    int ret = ftruncate(fd, shmSize);
    if (ret != 0)
    {
        printf("ftruncate ret: %d, errno: %d.\n", ret, errno);
        return 1;
    }
    
    /*
    // Check the permission mode
    struct stat st;
    ret = fstat(fd, &st);
    int mode = st.st_mode;
    printf("mode: 0%o \n", mode);
     */
    
    char *memResult = NULL;
    memory = mmap(NULL, shmSize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    if (memory != MAP_FAILED)
    {
        *((size_t*)memory) = shmSize;
        
        memResult = memory + sizeof(size_t);
        strncpy(memResult, "hanwei_is_just_a_name_right?_<end>", sizeof(container));
        printf("Before child process, size: %zu, memResult: %s\n", shmSize, memResult);
    }
    else
        perror("mmap");
    
    // child process ...
    
    char buffer[256];
    sprintf(buffer, "./Child %d", fd);
//    sprintf(buffer, "./Child %d %s", fd, memName);
    int status = system(buffer);
    sleep(IntervalsForWaiting);
    
    printf("child status: %d\n", status);
    printf("After child process, memResult: %s\n", memResult);
    
    return 0;
}
Ejemplo n.º 5
0
void pSocket::onDataReceived()
{
#ifdef FUNC_DEBUG
    qDebug() << '\n' << Q_FUNC_INFO;
#endif

    auto data = _socket->readAll();

    if (_packetSize == 0) {
        int n = data.indexOf("\n\n");
        if (n == -1) {
            qDebug() << "Wrong data received. Disconnect" << _socket->localAddress();
            _socket->disconnectFromHost();
            return;
        }

        QByteArray header = data.left(n);
        auto content = data.mid(n+2);
        _buffer = content;

	QString _generate_id;

	_generate_id = getValue(header, "generateid");
	if (_generate_id == "1") {
		_uuid = GenerateUUID();
		_socket->write(_uuid.toStdString().c_str());
		_socket->disconnectFromHost();
	}

        _limit.fetchAndAddAcquire(content.size());
        _packetSize = getValue(header, "size").toInt();
        _protoVersion   = getValue(header, "version");
        _fileType = getValue(header, "type");
        _uuid = getValue(header, "uuid");

        if (_uuid.length()!=0 && !checkUUID(_uuid)) {
            qDebug() << "UUID is incorrect. Disconnect" << _socket->localAddress();
            _socket->disconnectFromHost();
            return;
        }

        if (_packetSize == 0) {
            qDebug() << "Client trying to send empty data";
            _socket->disconnectFromHost();
        }

        if (_fileType == "" || !Settings::types().contains(_fileType) ) {
            qDebug() << "Sender type is not exist. Disconnect" << _socket->localAddress();
            _socket->disconnectFromHost();
            return;
        }

    } else {
        _buffer += data;
        _limit.fetchAndAddAcquire(data.size());
    }

    if (_buffer.size() > MAX_DATA_SIZE || _limit > MAX_DAY_SIZE) {
        qDebug() << "File is too big! Disconnect" << _socket->localAddress();
        _socket->disconnectFromHost();
        _socket->deleteLater();
        return;
    }

#ifdef FUNC_DEBUG
    qDebug() << '\n' << Q_FUNC_INFO << "read";
#endif

    if (_buffer.size() == _packetSize) {

#ifdef FUNC_DEBUG
        qDebug() << '\n' << Q_FUNC_INFO << "emit";
#endif

        _packetSize = 0;
        emit saveFile(_buffer, _fileType, _uuid);

#ifdef TIME_DEBUG
        qDebug() << dTime->elapsed();
#endif
    }

#ifdef FUNC_DEBUG
    qDebug() << '\n' << Q_FUNC_INFO << "end";
#endif
}
Ejemplo n.º 6
0
int TextHandler::build_detail_result_file(const TextID & tid, string & result_file_name)
{
    int ret = SUCCESS;

    //从数据库读取翻译结果
    vector<boost::tuple<string, string, string, string, string> > result_vec;
    string domain;
    string src_language;
    string tgt_language;

    ret = DBOperation::GetTransResultDetail(tid, result_vec, domain, src_language, tgt_language);

    if(SUCCESS != ret)
    {
        return ERR_GET_TGT_VEC_FROM_DB;
    }

    //生成TMX 格式数据
    string tmx_data;

//
//[Language]
//[Total Number]
//
//[Sent 0 ]
//	[   Pre     ]
//  [   Rules   ]
//  [  Decode  ]
//  [ UsrModify ]
//  [   Final   ]
//[-------]
//
//[Sent 1 ]
//	[   Pre     ]
//  [   Rules   ]
//  [  Decode  ]
//  [ UsrModify ]
//  [   Final   ]
//[-------]

//[END]

    stringstream data;
    data << "[Domain] : " << domain << "\r\n";
    data << "[Language] " << src_language << " --> " << tgt_language << "\r\n";
    data << "[Total Number] " << result_vec.size() << "\r\n";
    data << "\r\n";
    data << "\r\n";

    for(size_t i=0; i<result_vec.size(); ++i)
    {
        data << "[Sent " << i << " ]" << "\r\n";
        data << "   [   Pre     ] " << result_vec[i].get<0>() << "\r\n";
        data << "   [   Rules   ] " << result_vec[i].get<1>() << "\r\n";
        data << "   [  Decode   ] " << result_vec[i].get<2>() << "\r\n";
        data << "   [ UsrModify ] " << result_vec[i].get<3>() << "\r\n";
        data << "   [   Final   ] " << result_vec[i].get<4>() << "\r\n";
        data << "[-------]" << "\r\n";
        data << "\r\n";

    }

    data << "[END]" << "\r\n" ;

    //写入到文件
    string build_id = GenerateUUID();
    result_file_name = tid + "." + build_id + ".txt";
    string tmx_filepath = m_default_file_path + result_file_name;

    if(false == write_file(tmx_filepath, data.str().c_str(), data.str().size()))
    {
        return ERR_OPEN_RESULT_FILE_FAILED;
    }

    return SUCCESS;
}
Ejemplo n.º 7
0
// on_create_result_1
int TextHandler::build_tmx_result_file(const TextID & tid, string & result_file_name)
{
    int ret = SUCCESS;

    //从数据库读取翻译结果
    vector<boost::tuple<string, string, string> > result_vec;
    string tgt_language;

    ret = DBOperation::GetTransResultPair(tid, result_vec, tgt_language);

    if(SUCCESS != ret)
    {
        return ERR_GET_TGT_VEC_FROM_DB;
    }

    //生成TMX 格式数据
    string tmx_data;

//<?xml version="1.0" encoding=UTF-8" ?>
//
//<tmx version="1.4">
//	<header creationdate=""			    <!--创建日期-->
//			creationtool="" 			<!--创建工具-->
//			creationtoolversion=""      <!--创建工具的版本-->
//			datatype="unknown"          <!--数据类型:有很多种,一般使用默认-->
//			o-tmf="unknown"				<!--源存储格式-->
//			segtype="block"				<!--段值:block,paragraph,sentence,phrase-->
//			srclang="*all*"				<!--源语言:常使用*all*-->
//			adminlang="en"/>            <!--Administrative language-->
//
//	<body>
//		<tu changedate="">              <!--修改日期-->
//			<tuv xml:lang="en"><seg>introduction</seg></tuv>
//			<tuv xml:lang="zh-cn"><seg>简介</seg></tuv>
//		</tu>
//		<tu changedate="">
//			<tuv xml:lang="en"><seg>conclusion</seg></tuv>
//			<tuv xml:lang="zh-cn"><seg>总结</seg></tuv>
//		</tu>
//	</body>
//</tmx>

    TiXmlDocument * xmlDocs = new TiXmlDocument();

    try
    {
        //声明
        TiXmlDeclaration* dec = new TiXmlDeclaration("1.0", "UTF-8", "");
        xmlDocs->LinkEndChild(dec);

        //tmx 节点
        TiXmlElement * tmxElem = new TiXmlElement("tmx");
        xmlDocs->LinkEndChild(tmxElem);

        //header节点
        TiXmlElement * headerElem = new TiXmlElement("header");
        headerElem->SetAttribute("creationdate", "");
        headerElem->SetAttribute("creationtool", "ict_trans");
        headerElem->SetAttribute("creationtoolversion", "1.0");
        headerElem->SetAttribute("datatype", "unknown");
        headerElem->SetAttribute("o-tmf", "unknown");
        headerElem->SetAttribute("segtype", "sentence");
        headerElem->SetAttribute("srclang", "en");
        headerElem->SetAttribute("srclang", "zh-cn");
        tmxElem->LinkEndChild(headerElem);

        //body节点
        TiXmlElement * bodyElem = new TiXmlElement("body");
        tmxElem->LinkEndChild(bodyElem);

        //loop tu 节点
        for(size_t i=0; i<result_vec.size(); ++i)
        {
            //tu节点
            TiXmlElement * tuElem = new TiXmlElement("tu");
            bodyElem->LinkEndChild(tuElem);

            //tuv 节点对
            string * p_english = NULL;
            string * p_chinese = NULL;

            if(LANGUAGE_CHINESE == tgt_language)
            {
                p_english = &result_vec[i].get<0>();

                if(result_vec[i].get<2>().size() > 0)
                {
                    CLanguage::En2ChPost(result_vec[i].get<2>());
                    p_chinese = &result_vec[i].get<2>();
                }else
                {
                    p_chinese = &result_vec[i].get<1>();
                }

            }else
            {
                p_chinese = &result_vec[i].get<0>();

                if(result_vec[i].get<2>().size() > 0)
                {
                    CLanguage::Ch2EnPost(result_vec[i].get<2>());
                    p_english = &result_vec[i].get<2>();
                }else
                {
                    p_english = &result_vec[i].get<1>();
                }
            }

            //tuv-en
            TiXmlElement * tuvenElem = new TiXmlElement("tuv");
            TiXmlText * tuvenText = new TiXmlText(p_english->c_str());
            tuvenElem->SetAttribute("xml:lang", "en");
            tuvenElem->LinkEndChild(tuvenText);
            tuElem->LinkEndChild(tuvenElem);

            //tuv-ch
            TiXmlElement * tuvchElem = new TiXmlElement("tuv");
            TiXmlText * tuvchText = new TiXmlText(p_chinese->c_str());
            tuvenElem->SetAttribute("xml:lang", "zh-ch");
            tuvchElem->LinkEndChild(tuvchText);
            tuElem->LinkEndChild(tuvchElem);

        }

        //输出到xmldata
        TiXmlPrinter print;
        xmlDocs->Accept(&print);
        tmx_data = print.CStr();

    }catch (...)
    {
        lerr << "Create xml-tmx failed." << endl;
        delete xmlDocs;

        return ERR_USR_XML_PARSER;
    }

    delete xmlDocs;

    //写入到文件
    string build_id = GenerateUUID();
    result_file_name = tid + "." + build_id + ".tmx";
    string tmx_filepath = m_default_file_path + result_file_name;

    if(false == write_file(tmx_filepath, tmx_data.c_str(), tmx_data.size()))
    {
        return ERR_OPEN_RESULT_FILE_FAILED;
    }

    return SUCCESS;
}