void RpcServer(const SOCKET sock, const DWORD RpcAssocGroup) { RPC_HEADER _Header; RandomNumberInit(); while (_recv(sock, &_Header, sizeof(_Header))) { unsigned int _st, request_len, response_len, _a; BYTE *_Request /* = NULL */; //uncomment to avoid false warnings when compiling with -Og #if defined(_PEDANTIC) && !defined(NO_LOG) CheckRpcHeader(&_Header, _Header.PacketType, &logger); #endif // defined(_PEDANTIC) && !defined(NO_LOG) switch (_Header.PacketType) { case RPC_PT_BIND_REQ: _a = 0; break; case RPC_PT_REQUEST: _a = 1; break; default: return; } if ( (_st = ( (signed)( request_len = LE16(_Header.FragLength) - sizeof(_Header) )) > 0 && (_Request = (BYTE*)malloc(request_len) ))) { BYTE *_Response /* = NULL */; //uncomment to avoid warnings when compiling with -Og if ((_st = (_recv(sock, _Request, request_len)) && ( response_len = _Actions[_a].GetResponseSize(_Request, request_len) ) && (_Response = (BYTE*)malloc( response_len += sizeof(_Header) )))) { if ( (_st = _Actions[_a].GetResponse(_Request, _Response + sizeof(_Header), RpcAssocGroup, sock, request_len)) ) { RPC_HEADER *rh = (RPC_HEADER *)_Response; if (_Actions[_a].ResponsePacketType == RPC_PT_RESPONSE) response_len = LE32(((RPC_RESPONSE*)(_Response + sizeof(_Header)))->AllocHint) + 24; /* *((WORD*)rh) = *((WORD*)&_Header); rh->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; rh->DataRepresentation = _Header.DataRepresentation; rh->AuthLength = _Header.AuthLength; rh->CallId = _Header.CallId;*/ memcpy(rh, &_Header, sizeof(RPC_HEADER)); rh->PacketType = _Actions[_a].ResponsePacketType; rh->FragLength = LE16(response_len); _st = _send(sock, _Response, response_len); if (DisconnectImmediately && rh->PacketType == RPC_PT_RESPONSE) shutdown(sock, VLMCSD_SHUT_RDWR); } free(_Response); } free(_Request); } if (!_st) return; } }
void MyModuleInit(RTC::Manager* manager) { RandomNumberInit(manager); RTC::RtcBase* comp; // Create a component comp = manager->createComponent("RandomNumber"); if (comp==NULL) { std::cerr << "Component create failed." << std::endl; abort(); } // Example // The following procedure is examples how handle RT-Components. // These should not be in this function. // Get the component's object reference // RTC::RTObject_var rtobj; // rtobj = RTC::RTObject::_narrow(manager->getPOA()->servant_to_reference(comp)); // Get the port list of the component // PortServiceList* portlist; // portlist = rtobj->get_ports(); // getting port profiles // std::cout << "Number of Ports: "; // std::cout << portlist->length() << std::endl << std::endl; // for (CORBA::ULong i(0), n(portlist->length()); i < n; ++i) // { // PortService_ptr port; // port = (*portlist)[i]; // std::cout << "Port" << i << " (name): "; // std::cout << port->get_port_profile()->name << std::endl; // // RTC::PortInterfaceProfileList iflist; // iflist = port->get_port_profile()->interfaces; // std::cout << "---interfaces---" << std::endl; // for (CORBA::ULong i(0), n(iflist.length()); i < n; ++i) // { // std::cout << "I/F name: "; // std::cout << iflist[i].instance_name << std::endl; // std::cout << "I/F type: "; // std::cout << iflist[i].type_name << std::endl; // const char* pol; // pol = iflist[i].polarity == 0 ? "PROVIDED" : "REQUIRED"; // std::cout << "Polarity: " << pol << std::endl; // } // std::cout << "---properties---" << std::endl; // NVUtil::dump(port->get_port_profile()->properties); // std::cout << "----------------" << std::endl << std::endl; // } return; }