int main(int argc, TCHAR* argv[], TCHAR* envp[]) { HANDLE hProcess; //取当前进程的句柄 hProcess=GetCurrentProcess(); //设置当前进程的优先级 //REALTIME_PRIORITY_CLASS--指示该进程拥有可用的最高优先级。 if(!SetPriorityClass(hProcess,REALTIME_PRIORITY_CLASS)){ return 1; } // create the service-object CNetService serv; // RegisterService() checks the parameterlist for predefined switches // (such as -d or -i etc.; see NTService.h for possible switches) and // starts the services functionality. // You can use the return value from "RegisterService()" // as your exit-code. //2012-7-17 日志记录 logIsEnabled = __false;//__true为启动日志记录功能 open_log(); serv.RegisterService(argc, argv); close_log();//2012-7-17 关闭日志 return 1; }
CJsonNode SNetStorageRPC::Exchange(CNetService service, const CJsonNode& request, CNetServerConnection* conn, CNetServer::TInstance server_to_use) const { CNetServer server(server_to_use != NULL ? server_to_use : (CNetServer::TInstance) *service.Iterate(CNetService::eRandomize)); CJsonOverUTTPExecHandler json_over_uttp_sender(request); server->TryExec(json_over_uttp_sender); CReadJsonFromSocket message_reader; if (conn != NULL) *conn = json_over_uttp_sender.GetConnection(); CSocket& sock = json_over_uttp_sender.GetConnection()->m_Socket; CJsonNode reply(message_reader.ReadMessage(sock)); s_TrapErrors(request, reply, sock, m_Config.err_mode); return reply; }
int main(int argc, TCHAR* argv[], TCHAR* envp[]) { HANDLE hProcess; hProcess=GetCurrentProcess(); if(!SetPriorityClass(hProcess,REALTIME_PRIORITY_CLASS)){ return 1; } // create the service-object CNetService serv; // RegisterService() checks the parameterlist for predefined switches // (such as -d or -i etc.; see NTService.h for possible switches) and // starts the services functionality. // You can use the return value from "RegisterService()" // as your exit-code. return serv.RegisterService(argc, argv); }
ERW_Result SNetStorageObjectRPC::Read(void* buffer, size_t buf_size, size_t* bytes_read) { if (m_State == eWriting) { NCBI_THROW_FMT(CNetStorageException, eInvalidArg, "Cannot read a NetStorage file while writing to it"); } size_t bytes_read_local; if (m_State == eReady) { m_OriginalRequest = x_MkRequest("READ"); if (m_ReadBuffer == NULL) m_ReadBuffer = new char[READ_BUFFER_SIZE]; CNetServer server(*m_OwnService.Iterate(CNetService::eRandomize)); CJsonOverUTTPExecHandler json_over_uttp_sender(m_OriginalRequest); server->TryExec(json_over_uttp_sender); CSocket& sock = json_over_uttp_sender.GetConnection()->m_Socket; CJsonOverUTTPReader json_reader; try { do { s_ReadSocket(sock, m_ReadBuffer, READ_BUFFER_SIZE, &bytes_read_local); m_UTTPReader.SetNewBuffer(m_ReadBuffer, bytes_read_local); } while (!json_reader.ReadMessage(m_UTTPReader)); } catch (...) { m_UTTPReader.Reset(); sock.Close(); throw; } s_TrapErrors(m_OriginalRequest, json_reader.GetMessage(), sock, m_NetStorageRPC->m_Config.err_mode); m_Connection = json_over_uttp_sender.GetConnection(); m_CurrentChunkSize = 0; m_State = eReading; m_EOF = false; } char* buf_pos = reinterpret_cast<char*>(buffer); if (m_CurrentChunkSize >= buf_size) { if (buf_size > 0) { memcpy(buf_pos, m_CurrentChunk, buf_size); m_CurrentChunk += buf_size; m_CurrentChunkSize -= buf_size; } if (bytes_read != NULL) *bytes_read = buf_size; return eRW_Success; } if (m_CurrentChunkSize > 0) { memcpy(buf_pos, m_CurrentChunk, m_CurrentChunkSize); buf_pos += m_CurrentChunkSize; buf_size -= m_CurrentChunkSize; } size_t bytes_copied = m_CurrentChunkSize; m_CurrentChunkSize = 0; if (m_EOF) { if (bytes_read != NULL) *bytes_read = bytes_copied; return bytes_copied ? eRW_Success : eRW_Eof; } try { while (buf_size > 0) { switch (m_UTTPReader.GetNextEvent()) { case CUTTPReader::eChunkPart: case CUTTPReader::eChunk: m_CurrentChunk = m_UTTPReader.GetChunkPart(); m_CurrentChunkSize = m_UTTPReader.GetChunkPartSize(); if (m_CurrentChunkSize >= buf_size) { memcpy(buf_pos, m_CurrentChunk, buf_size); m_CurrentChunk += buf_size; m_CurrentChunkSize -= buf_size; if (bytes_read != NULL) *bytes_read = bytes_copied + buf_size; return eRW_Success; } memcpy(buf_pos, m_CurrentChunk, m_CurrentChunkSize); buf_pos += m_CurrentChunkSize; buf_size -= m_CurrentChunkSize; bytes_copied += m_CurrentChunkSize; m_CurrentChunkSize = 0; break; case CUTTPReader::eControlSymbol: if (m_UTTPReader.GetControlSymbol() != END_OF_DATA_MARKER) { NCBI_THROW_FMT(CNetStorageException, eIOError, "NetStorage API: invalid end-of-data-stream " "terminator: " << (int) m_UTTPReader.GetControlSymbol()); } m_EOF = true; ReadConfirmation(); if (bytes_read != NULL) *bytes_read = bytes_copied; return bytes_copied ? eRW_Success : eRW_Eof; case CUTTPReader::eEndOfBuffer: s_ReadSocket(m_Connection->m_Socket, m_ReadBuffer, READ_BUFFER_SIZE, &bytes_read_local); m_UTTPReader.SetNewBuffer(m_ReadBuffer, bytes_read_local); break; default: NCBI_THROW_FMT(CNetStorageException, eIOError, "NetStorage API: invalid UTTP status " "while reading " << m_Locator); } } if (bytes_read != NULL) *bytes_read = bytes_copied; return eRW_Success; } catch (...) { m_State = eReady; m_UTTPReader.Reset(); m_Connection->Close(); m_Connection = NULL; throw; } }
CNetServiceIterator SNCMirrorIterationBeginner::BeginIteration() { return m_Service.Iterate(m_PrimaryServer); }