⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jump_os_impl.c

📁 This is a resource based on j2me embedded,if you dont understand,you can connection with me .
💻 C
📖 第 1 页 / 共 2 页
字号:
    r = jumpMessageWaitFor((JUMPPlatformCString)type, (int32)timeout, &code);    if (r == NULL) {	switch (code) {	  case JUMP_OUT_OF_MEMORY:	    JNU_ThrowOutOfMemoryError(env, "in jumpMessageWaitFor");	    break;	  case JUMP_TIMEOUT:	    throw_by_name(env, "com/sun/jump/message/JUMPTimedOutException");	    break;	  case JUMP_UNBLOCKED:	    throw_by_name(env, "com/sun/jump/message/JUMPUnblockedException");	    break;	  case JUMP_NO_SUCH_QUEUE:	    // The design of the Java code should not allow this.	    // Fall through to default.	  default:	    throw_IOException(env, code);	    break;	}	goto out;    }    retVal = new_byte_array_from_message(env, r);    if (retVal == NULL) {	/* Exception already thrown. */	goto out;    }  out:    if (r != NULL) {	jumpMessageFree(r);    }    return retVal;}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_sendMessageAsync(    JNIEnv *env,     jobject thisObj,     jint pid,     jbyteArray messageBytes,    jboolean isResponse){    JUMPOutgoingMessage m = NULL;    JUMPAddress target;    JUMPMessageStatusCode code;    ensureInitialized();    m = new_outgoing_message_from_byte_array(env, messageBytes, isResponse);    if (m == NULL) {	/* Exception already thrown. */	goto out;    }    target.processId = pid;    jumpMessageSendAsync(target, m, &code);    switch (code) {      case JUMP_SUCCESS:	break;      case JUMP_OUT_OF_MEMORY:	JNU_ThrowOutOfMemoryError(env, "in jumpMessageSendSync");	break;      case JUMP_TARGET_NONEXISTENT:	throw_with_messagetype(	    env, "com/sun/jump/message/JUMPTargetNonexistentException",	    jumpMessageGetType(m));	break;      case JUMP_WOULD_BLOCK:	throw_with_messagetype(	    env, "com/sun/jump/message/JUMPWouldBlockException",	    jumpMessageGetType(m));	break;      default:	throw_IOException(env, code);	break;    }  out:    if (m != NULL) {	jumpMessageFreeOutgoing(m);    }}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_sendMessageResponse(    JNIEnv *env,     jobject thisObj,     jbyteArray messageBytes,    jboolean isResponse){    JUMPOutgoingMessage m = NULL;    JUMPMessageStatusCode code;    ensureInitialized();    m = new_outgoing_message_from_byte_array(env, messageBytes, isResponse);    if (m == NULL) {	/* Exception already thrown. */	goto out;    }    jumpMessageSendAsyncResponse(m, &code);    switch (code) {      case JUMP_SUCCESS:	break;      case JUMP_OUT_OF_MEMORY:	JNU_ThrowOutOfMemoryError(env, "in jumpMessageSendSync");	break;      case JUMP_TARGET_NONEXISTENT:	throw_with_messagetype(	    env, "com/sun/jump/message/JUMPTargetNonexistentException",	    jumpMessageGetType(m));	break;      case JUMP_WOULD_BLOCK:	throw_with_messagetype(	    env, "com/sun/jump/message/JUMPWouldBlockException",	    jumpMessageGetType(m));	break;      default:	throw_IOException(env, code);	break;    }  out:    if (m != NULL) {	jumpMessageFreeOutgoing(m);    }}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_reserve(    JNIEnv *env,     jobject thisObj,     jstring messageType){    const char* type;    JUMPMessageQueueStatusCode mqcode;    type = (*env)->GetStringUTFChars(env, messageType, NULL);    if (type == NULL) {	return;    }    /* FIXME: use jumpMessageRegisterDirect. */    jumpMessageQueueCreate((JUMPPlatformCString)type, &mqcode);    switch (mqcode) {      case JUMP_MQ_SUCCESS:	break;      case JUMP_MQ_OUT_OF_MEMORY:	JNU_ThrowOutOfMemoryError(env, "in jumpMessageQueueCreate");	break;      default:	throw_IOException(env, JUMP_FAILURE);	break;    }    (*env)->ReleaseStringUTFChars(env, messageType, type);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_unreserve(    JNIEnv *env,     jobject thisObj,     jstring messageType){    const char* type;    type = (*env)->GetStringUTFChars(env, messageType, NULL);    if (type == NULL) {	return;    }    /* FIXME: use jumpMessageCancelRegistration. */    jumpMessageQueueDestroy((JUMPPlatformCString)type);    (*env)->ReleaseStringUTFChars(env, messageType, type);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_unblock(    JNIEnv *env,     jobject thisObj,     jstring messageType){    const char* type;    JUMPMessageStatusCode code;    type = (*env)->GetStringUTFChars(env, messageType, NULL);    if (type == NULL) {	return;    }    jumpMessageUnblock((JUMPPlatformCString)type, &code);    switch (code) {      case JUMP_SUCCESS:	break;      case JUMP_NO_SUCH_QUEUE:	// The design of the Java code should not allow this.	// Fall through to default.      default:	throw_IOException(env, code);	break;    }    (*env)->ReleaseStringUTFChars(env, messageType, type);}static intcreate_process(    JNIEnv *env,     jobject thisObj,    jobjectArray arguments,    int isNative){    int argc;    char** argv;    int i;    int retVal;    jboolean isCopy;        if (arguments == NULL) {	argc = 0;	argv = NULL;    } else {	argc = (*env)->GetArrayLength(env, arguments);	argv = calloc(argc, sizeof(char*));	if (argv == NULL) {	    return -1;	}		for (i = 0; i < argc; i++) {	    jobject argObj = (*env)->GetObjectArrayElement(env, arguments, i);	    char* arg = (char*)(*env)->GetStringUTFChars(env, argObj, &isCopy);	    argv[i] = arg;	}    }        if (isNative) {	retVal = jumpProcessNativeCreate(argc, argv);    } else {	retVal = jumpProcessCreate(argc, argv);    }    if (argv != NULL) {	if (isCopy) {	    for (i = 0; i < argc; i++) {		free(argv[i]);	    }	}	free(argv);    }    return retVal;}JNIEXPORT int JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_createProcess(    JNIEnv *env,     jobject thisObj,    jobjectArray arguments){    return create_process(env, thisObj, arguments, 0);}JNIEXPORT int JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_createProcessNative(    JNIEnv *env,     jobject thisObj,    jobjectArray arguments){    return create_process(env, thisObj, arguments, 1);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_setTestingMode(    JNIEnv *env,     jobject thisObj,    jstring filePrefix){    JUMPPlatformCString type = "mvm/server";    JUMPOutgoingMessage outMessage;    JUMPAddress targetAddress;    JUMPMessageStatusCode code;    jboolean isCopy = JNI_FALSE;    char *filePrefixStr;    filePrefixStr = (*env)->GetStringUTFChars(env, filePrefix, &isCopy);    outMessage = jumpMessageNewOutgoingByType(type, &code);    jumpMessageAddInt(outMessage, 2);    jumpMessageAddString(outMessage, "TESTING_MODE");    jumpMessageAddString(outMessage, filePrefixStr);    targetAddress.processId = jumpProcessGetServerPid();#define TIMEOUT 10000    jumpMessageSendSync(targetAddress, outMessage, TIMEOUT, &code);    (*env)->ReleaseStringUTFChars(env, filePrefix, filePrefixStr);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_shutdownServer(    JNIEnv *env,    jobject thisObj){    JUMPPlatformCString type = "mvm/server";    JUMPOutgoingMessage outMessage;    JUMPAddress targetAddress;    JUMPMessageStatusCode code;    outMessage = jumpMessageNewOutgoingByType(type, &code);    jumpMessageAddInt(outMessage, 1);    jumpMessageAddString(outMessage, "JEXIT");    jumpMessageQueueCleanQueuesOf(jumpProcessGetExecutiveId());            targetAddress.processId = jumpProcessGetServerPid();                #define TIMEOUT 10000    jumpMessageSendSync(targetAddress, outMessage, TIMEOUT, &code);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -