⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 named_pipe.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: named_pipe.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 20:48:30  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10 * PRODUCTION * =========================================================================== *//*  $Id: named_pipe.cpp,v 1000.1 2004/06/01 20:48:30 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Josh Cherry * * File Description: *    Named pipe functionality for Genome Workbench */#include <ncbi_pch.hpp>#include "named_pipe.hpp"#include "load_file.hpp"#include "gbench.hpp"#include <gui/utils/system_path.hpp>#include <FL/Fl.H>BEGIN_NCBI_SCOPECNamedPipeServer CGBenchPipe::sm_NamedPipeServer;void CGBenchPipe::Start(void){    if (sm_NamedPipeServer.Create(x_GetPipeName()) != eIO_Success) {        throw runtime_error("CNamedPipeServer::Create failed");    }    // zero timeouts for open (Listen) and read    STimeout to = {0, 0};    if (sm_NamedPipeServer.SetTimeout(eIO_Open, &to) != eIO_Success) {        throw runtime_error("CNamedPipeServer::SetTimeout failed for Open");    }    if (sm_NamedPipeServer.SetTimeout(eIO_Read, &to) != eIO_Success) {        throw runtime_error("CNamedPipeServer::SetTimeout failed for Read");    }    // call the callback to read, which has itself called repeatedly    Fl::add_timeout(0.1, x_ReadPipe, NULL);   }// Determine appropriate name of pipestring CGBenchPipe::x_GetPipeName(void){#ifdef NCBI_OS_MSWIN	string user_name = CGBenchApp::Instance()->GetEnvironment().Get("USERNAME");    return "\\\\.\\pipe\\gbench_pipe-" + user_name;#else  // unix of some sort    return CSystemPath::ResolvePath("<home>/gbench_pipe");#endif}// fltk timeout callback to read pipe.// ptr argument is a pointer to the app.void CGBenchPipe::x_ReadPipe(void *ptr){    CNamedPipeServer& srv = sm_NamedPipeServer;    if (srv.Listen() == eIO_Success) {        string data;        const size_t buf_size = 1024;        char buf[buf_size];        size_t n_read;        while (srv.Status(eIO_Read) == eIO_Success ||               srv.Status(eIO_Read) == eIO_Timeout) {            srv.Read(buf, buf_size, &n_read);	            data.append(buf, n_read);        }        // data is either just a file name, or a file name        // and a file type separated by a null        string fname;        string ftype;        vector<string> tokens;        string delim;        delim = '\0';  // not an empty string        NStr::Tokenize (data, delim, tokens);        fname = tokens[0];        if (tokens.size() > 1) {            ftype = tokens[1];        } else {            ftype = "auto";        }        GBenchLoadFile(fname, ftype, true);    }    Fl::repeat_timeout(0.1, x_ReadPipe, ptr);   }void CGBenchPipe::OpenRemote(const string& fname, const string& ftype){    size_t n_written;    size_t total_written = 0;    string msg = fname + '\0' + ftype;    CNamedPipeClient cli;    STimeout to = {0, 100000};    if (cli.SetTimeout(eIO_Open, &to) != eIO_Success) {        throw runtime_error("CNamedPipeServer::SetTimeout failed for Open");    }    if (cli.Open(x_GetPipeName()) != eIO_Success) {        throw runtime_error("Failed to open named pipe for writing");    }    while (1) {        EIO_Status status = cli.Write(msg.c_str() + total_written,                                      msg.size(), &n_written);        total_written += n_written;        if (total_written == msg.size()) {            break;        }        if (status != eIO_Success && status != eIO_Timeout) {            break;        }    }    if (total_written != msg.size()) {        throw runtime_error("Failed to write to named pipe");    }}END_NCBI_SCOPE/* * =========================================================================== * $Log: named_pipe.cpp,v $ * Revision 1000.1  2004/06/01 20:48:30  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10 * * Revision 1.10  2004/05/21 22:27:42  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.9  2004/03/23 13:38:08  dicuccio * MOre efficient use of FLTK timeouts * * Revision 1.8  2004/03/22 15:40:20  jcherry * Added file type command-line argument * * Revision 1.7  2004/03/17 15:46:18  jcherry * Windows hack no longer necessary * * Revision 1.6  2004/03/16 18:34:44  jcherry * Append username to pipe name on Windows to make it unique * * Revision 1.5  2004/03/16 17:40:06  jcherry * A hack for Windows * * Revision 1.4  2004/03/16 17:29:02  jcherry * Added timeout for opening for write * * Revision 1.3  2004/03/15 16:06:18  jcherry * Launch default viewer when opening file from command line * * Revision 1.2  2004/03/11 19:25:35  jcherry * Moved load_file to gui/gbench * * Revision 1.1  2004/03/11 17:10:35  jcherry * Initial version * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -