📄 clerk.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 + -