Пример #1
0
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;
}
Пример #2
0
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;
}