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

📄 clerk.cpp

📁 GiPS是一个面向数据密集型应用的分布式文件系统
💻 CPP
字号:
#include <Ice/Ice.h>
#include <stdio.h>
#include <fstream>
#include "Cluster.h"
#include "ClerkCallBackI.h"
#include "FileIOManagerI.h"

using namespace std;
using namespace Cluster;

DWORD WINAPI clerkLog(PVOID pvParam)
{
	std::map<std::string, std::string>* paths = (std::map<std::string, std::string>*) pvParam;
	while (true)
	{
		Sleep(15000);
		cout << "clerk log" << endl;
		ofstream outLog("clerk.log");
		outLog << paths->size() << endl;
		for (std::map<std::string, std::string>::iterator it = paths->begin(); it != paths->end(); it++)
		{
			outLog << it->first << endl;
			outLog << it->second << endl;
		}
		outLog.close();
	}
	return 0;
}



class ClerkApp : virtual public Ice::Application {
public:
	virtual int run(int argc, char* argv[]) {
		int status = 0;

		//启动
		shutdownOnInterrupt();
		puts("crate FileIOManager");
		FileIOManagerI::_adapter = communicator()->createObjectAdapter("FileIOManager");
		FileIOManagerI* ioManager = new FileIOManagerI(communicator());
		initialIOManager(ioManager);

		this->m_fileIOManager = ioManager;

		puts("FileIOManager active");
		FileIOManagerI::_adapter->activate();

		ClusterMessengerPrx clusterMessenger = ClusterMessengerPrx::checkedCast(communicator()->propertyToProxy("ClusterMessenger.Proxy"));
		if(!clusterMessenger)
		{
			cerr << argv[0] << ": invalid proxy" << endl;
			return EXIT_FAILURE;
		}

		Ice::PropertiesPtr props = communicator()->getProperties();
		Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("ClerkBallBackByMaster");
		adapter->add(new ClerkCallBackI(&(ioManager->m_paths)), communicator()->stringToIdentity("ClerkBallBackByMaster"));
		puts("start register");
		ClerkCallBackPrx clerkcallbackPrx = ClerkCallBackPrx::uncheckedCast(adapter->createProxy(communicator()->stringToIdentity("ClerkBallBackByMaster")));
		adapter->activate();
		clusterMessenger->clerkCallBackRegister(props->getProperty("Clerk.IP"), clerkcallbackPrx);
		puts("has registered");

		DWORD clerkLogThreadID;
		HANDLE clerkLogThread = CreateThread(
			NULL, 0, clerkLog, &ioManager->m_paths, 0, &clerkLogThreadID);

		communicator()->waitForShutdown();

		if (interrupted()) {
			cerr << appName()<< ": reveived signal, shutting down" << endl;
		}
		return status;
	}

	virtual void initialIOManager(FileIOManagerI* ioManager) {
		ifstream inLog("clerk.log");

		int MAX_LENGTH = 1024;
		char* cont = new char[MAX_LENGTH];
		if (inLog.eof())
			return;
		inLog.getline(cont, MAX_LENGTH);
		int size = atoi(cont);
		for (int i = 0; i < size; i++)
		{
			inLog.getline(cont, MAX_LENGTH);
			string fid = string(cont);
			inLog.getline(cont, MAX_LENGTH);
			string fpath = string(cont);
			ioManager->m_paths.insert(std::map<std::string, std::string>::value_type(fid, fpath));
		}
		inLog.close();
		cout << ioManager->m_paths.size() << endl;
	}

private:
	ClientClerk::FileIOManagerPtr m_fileIOManager;
};

int main(int argc, char * argv[])
{
	ClerkApp clerk;
	return clerk.main(argc, argv, "config.clerk");
}

⌨️ 快捷键说明

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