NS_IMETHODIMP urpConnectComponent::GetCompMan(char* cntStr, nsISupports** cm) { if (!cm) { printf("--urpConnectComponent::GetCompMan NS_ERROR_NULL_POINTER\n"); return NS_ERROR_NULL_POINTER; } if (!compM) { transport = new urpConnector(); transport->Open(cntStr); connection = transport->GetConnection(); man = new urpManager(PR_TRUE, nsnull, connection); stub = new urpStub(man, connection); nsresult r; NS_WITH_SERVICE(bcIXPCOMStubsAndProxies, xpcomStubsAndProxies, kXPCOMStubsAndProxies, &r); if (NS_FAILED(r)) { printf("--urpConnectComponent::GetCompMan xpcomStubsAndProxies failed \n"); return NS_ERROR_FAILURE; } NS_WITH_SERVICE(bcIORBComponent, _orb, kORBComponent, &r); if (NS_FAILED(r)) { printf("--urpConnectComponent::GetCompMan bcORB failed \n"); return NS_ERROR_FAILURE; } _orb->GetORB(&orb); bcOID oid = 441450497; orb->RegisterStubWithOID(stub, &oid); xpcomStubsAndProxies->GetProxy(oid, NS_GET_IID(nsIComponentManager), orb, (nsISupports**)&compM); } *cm = compM; return NS_OK; }
NS_IMETHODIMP PlugletEngine::GetJNIEnv(JNIEnv * *jniEnv) { JNIEnv * res = NULL; if (nsnull == jniEnv) { return NS_ERROR_NULL_POINTER; } #ifndef OJI_DISABLE nsresult result; if (!jvmManager) { NS_WITH_SERVICE(nsIJVMManager, _jvmManager, kJVMManagerCID, &result); if (NS_SUCCEEDED(result)) { jvmManager = (nsJVMManager*)((nsIJVMManager*)_jvmManager); } } if (!jvmManager) { return result; } if (NS_FAILED(result = jvmManager->CreateProxyJNI(NULL,&res))) { return result; } if (!securityContext) { securityContext = new PlugletSecurityContext(); } SetSecurityContext(res,securityContext); #else /* OJI_DISABLE */ if (!jvm) { PR_LOG(PlugletLog::log, PR_LOG_DEBUG, ("PlugletEngine::GetJNIEnv going to start our own jvm \n")); StartJVM(); } if (jvm) { jvm->AttachCurrentThread((void**)&res,NULL); } #endif /* OJI_DISABLE */ *jniEnv = res; return NS_OK; }
int main( int argc, char *argv[] ) { char *connectString = "socket,host=localhost,port=2009"; if( argc == 2 ) connectString = argv[1]; nsresult rv = NS_InitXPCOM(NULL, NULL); NS_ASSERTION( NS_SUCCEEDED(rv), "NS_InitXPCOM failed" ); (void) nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup, nsnull); NS_WITH_SERVICE(bcIORBComponent, _orb, kORBCIID, &rv); if (NS_FAILED(rv)) { printf("NS_WITH_SERVICE(bcXPC in Marshal failed\n"); } NS_WITH_SERVICE(bcIXPCOMStubsAndProxies, xpcomStubsAndProxies, kXPCOMStubsAndProxies, &rv); if (NS_FAILED(rv)) { printf("bcXPCOMStubsAndProxie failed\n"); return -1; } bcIORB *orb; _orb->GetORB(&orb); bcIStub *stub = nsnull; NS_WITH_SERVICE(nsIComponentManager, mComp, compManag, &rv); if (NS_FAILED(rv)) { printf("compManager failed\n"); return -1; } urpITest *proxy = nsnull; xpcomStubsAndProxies->GetStub((nsISupports*)mComp, &stub); bcOID oid = orb->RegisterStub(stub); urpTransport* trans = new urpAcceptor(); PRStatus status = trans->Open(connectString); if(status == PR_SUCCESS) printf("succes %ld\n",oid); else printf("failed\n"); urpManager* mngr = new urpManager(PR_FALSE, orb, nsnull); rv = NS_OK; while(NS_SUCCEEDED(rv)) { // rv = mngr->HandleRequest(trans->GetConnection()); urpConnection *conn = trans->GetConnection(); if( conn != NULL ) { // handle request in new thread localThreadArg *arg = new localThreadArg( mngr, conn ); PRThread *thr = PR_CreateThread( PR_USER_THREAD, thread_start_server, arg, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_UNJOINABLE_THREAD, 0); if( thr == nsnull ) { rv = NS_ERROR_FAILURE; } } else { rv = NS_ERROR_FAILURE; } } return 1; }