93 lines · 2.3 KB · C++
RawDownload
#include "StreamBasedLauncher.h"#include "Stream.h"#include "ServerProtocol.h"#include <iostream>#include <sstream>#include <arpa/inet.h> StreamBasedLauncher::StreamBasedLauncher(boost::program_options::variables_map &options)    : Launcher(options){    if(options.count("upgrade-server"))        upgradeMode = true;} StreamBasedLauncher::~StreamBasedLauncher(){} void StreamBasedLauncher::SetupStream(WaitableStream* aStream, Stream* wrapped){    this->stream = aStream;    this->rStream = wrapped ? wrapped : aStream;} ssize_t StreamBasedLauncher::read(void *p0, size_t n){    uint8_t* p = (uint8_t*)p0;    size_t gotBytes = rStream->read(p, n);    while(gotBytes < n)    {        rStream->flushWrite();        stream->wait();        gotBytes += rStream->read(p + gotBytes, n - gotBytes);    }    return gotBytes;} void StreamBasedLauncher::write(const void *p, size_t n){    while(!rStream->readyToWrite())        stream->wait();    rStream->write(p, n);} bool StreamBasedLauncher::Go(int timeout){    uint32_t tmp;     {        RemoteCommand cmd = upgradeMode ? RemoteCommand::upgradeLauncher : RemoteCommand::launchApp;        write(&cmd, 1);         write(std::string(app.type).data(), 4);        write(std::string(app.creator).data(), 4);                std::ostringstream rsrcOut;        app.resources.writeFork(rsrcOut);        std::string rsrc = rsrcOut.str();        std::string& data = app.data;        std::cerr << "Transferring " << (data.size() + rsrc.size() + 1023) / 1024 << " KB." << std::endl;         tmp = htonl(data.size());        write(&tmp, 4);        tmp = htonl(rsrc.size());        write(&tmp, 4);         write(data.data(), data.size());        write(rsrc.data(), rsrc.size());    }     while(!rStream->allDataArrived())        stream->wait();    std::cerr << "Running Application..." << std::endl;    read(&tmp, 4);    uint32_t result = ntohl(tmp);    std::cerr << "Finished (result = " << result << ")." << std::endl;        if(result == 0)    {        read(&tmp, 4);        uint32_t size = ntohl(tmp);        outputBytes.resize(size);        if(size > 0)            read(outputBytes.data(), size);    }     return result == 0;} void StreamBasedLauncher::DumpOutput(){    std::cout.write(outputBytes.data(), outputBytes.size());}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t