示例#1
0
bool EventReceiver::sendRetroShareLink(const QString& link)
{
	if (!sharedMemory.attach()) {
		/* No running instance found */
		return false;
	}

	bool result = true;

	if (sharedMemory.lock()) {
		SharedMemoryInfo *info = (SharedMemoryInfo*) sharedMemory.data();
		if (info) {
#ifdef WINDOWS_SYS
			if (info->wid) {
				QByteArray linkData(link.toUtf8());

				COPYDATASTRUCT send;
				send.dwData = OP_RETROSHARELINK;
				send.cbData = link.length() * sizeof(char);
				send.lpData = (void*) linkData.constData();

				SendMessage((HWND) info->wid, WM_COPYDATA, (WPARAM) 0, (LPARAM) (PCOPYDATASTRUCT) &send);
			} else {
				result = false;
			}
#else
			Q_UNUSED(link);

			QMessageBox mb(QMessageBox::Critical, "RetroShare", QObject::tr("Start with a RetroShare link is only supported for Windows."), QMessageBox::Ok);
			mb.setWindowIcon(QIcon(":/images/rstray3.png"));
			mb.exec();

			result = false;
#endif
		} else {
			result = false;
			std::cerr << "EventReceiver::sendRetroShareLink() Cannot lock shared memory !" << std::endl;
		}

		sharedMemory.unlock();
	} else {
		result = false;
		std::cerr << "EventReceiver::start() Cannot lock shared memory !" << std::endl;
	}

	sharedMemory.detach();

	return result;
}
示例#2
0
Link data and create a .z80 file";

int main (int argc, char **argv)
{
	try
	{
		int i;
		COptionParser optParser(appliOption, appliName, appliUsageShort, appliUsageLong, authorName, authorMail);
		
		optParser.PrintHeader(std::cout);

		if (!optParser.ParseCommandLine(&argc, &argv, 0, true))
		{
			optParser.PrintError(std::cout);
			optParser.PrintUsage(std::cout);
			return -1;
		}
	
		i=0;
		while (optParser.GetOptionI(i) != 0)
		{
			switch(optParser.GetOptionI(i))
			{
			case 'd' :
				{
					SDataLinker file;
					std::string name = optParser.GetStringOptionI(i, 0);
					std::string label = optParser.GetStringOptionI(i, 1);
					unsigned int mask = optParser.GetIntOptionI(i, 2);
					file.data = CDataLink(name, label, mask);
					file.data.loadFile();
					file.adr = -1;
					linkerDataTable.push_back(file);
					break;
				}
			case 'z':
				{
					SDataZone zone;
					zone.name = optParser.GetStringOptionI(i, 0);
					zone.bank = optParser.GetIntOptionI(i, 1);
					zone.start = optParser.GetIntOptionI(i, 2);
					zone.end = optParser.GetIntOptionI(i, 3);
					linkerZoneTable.push_back(zone);
					break;
				}
			case 'o' : 
				{
					linkerOutASM = new std::ofstream(optParser.GetStringOptionI(i, 0).c_str());
					break;
				}
			case 'c' : {break;}
			default :
				{
					std::cerr << "Unknow option ! " << optParser.GetOptionI(i) << std::endl;
					return -1;
				}
			}
			i++;
		}
	
		linkData();
	
		saveFile();
	}
	catch(tools::CException &e)
	{
		std::cerr << e << std::endl;
		return -1;
	}

	return 0;
}
示例#3
0
Archipelago::Archipelago(const std::string& islandFile, const std::string& linkFile)
{
	// read from file if present
	std::string currentFileRead = islandFile;
	try
	{
		// consume island data file
		std::ifstream is(islandFile);
		if (is.good())
		{
			// digest file
			std::istream_iterator<std::string> start(is), end;
			std::vector<std::string> islandDataStrings = std::vector<std::string>(start, end);
			// extact data to property set
			std::vector<IslandProperties> islandNodes(islandDataStrings.size());
			std::transform (islandDataStrings.begin(), islandDataStrings.end(), islandNodes.begin(), ExtractIslandData);
			// insert data into graph
			for ( auto island : islandNodes )
			{
				vertex_t u = boost::add_vertex(m_islandGraph);
				m_islandGraph[u].name = island.name;
				m_islandGraph[u].terrain = island.terrain;
			}
		}

		currentFileRead = linkFile;
		is = std::ifstream(linkFile);
		if (is.good())
		{
			// digest file
			std::istream_iterator<std::string> start(is), end;
			std::vector<std::string> linkDataStrings = std::vector<std::string>(start, end);
			// extact data to property set
			std::vector<LinkData> linkData(linkDataStrings.size());
			std::transform (linkDataStrings.begin(), linkDataStrings.end(), linkData.begin(), ExtractLinkData);
			// insert data into graph
			for ( auto link : linkData )
			{
				unsigned int searchResultA;
				unsigned int searchResultB;
				if (FindIslandByName(link.nodeNameA, searchResultA) && FindIslandByName(link.nodeNameB, searchResultB))
				{
					link.resolvedNodeA = searchResultA;
					link.resolvedNodeB = searchResultB;
				}
				else
				{
					throw std::runtime_error("Error: could not find one of " + link.nodeNameA + " or " + link.nodeNameB + "in island nodes\n");
				}

				// Create an edge conecting those two vertices
				edge_t e; bool b;
				Graph::vertex_descriptor u = *vertices(m_islandGraph).first + link.resolvedNodeA;
				Graph::vertex_descriptor v = *vertices(m_islandGraph).first + link.resolvedNodeB;
				boost::tie(e,b) = boost::add_edge(u,v,m_islandGraph);

				// Set the properties of a vertex and the edge
				m_islandGraph[e].linkType = link.properties.linkType;
			}
		}
	}
	catch (std::runtime_error& error)
	{
		throw std::runtime_error(error.what() + std::string("Error in file: ") + currentFileRead + "\n");
	}
}