Exemple #1
0
ci::BufferRef UrlLoader::loadUrl( const std::string& url )
{
	ci::BufferRef result;

	mUrl = url;

	if( JniHelper::Get()->AttachCurrentThread() ) {
		jstring jstrUrl = JniHelper::Get()->NewStringUTF( mUrl );

		jbyteArray jBytes = (jbyteArray)JniHelper::Get()->CallObjectMethod( mJavaObject, UrlLoader::sJavaMethodLoadUrl, jstrUrl );
		if( nullptr == jBytes ) {
			int resCode = getResponseCode();
			std::string resMsg = getResponseMsg();
			std::string excMsg = getExceptionMsg();
			std::stringstream ss;
			ss << "UrlLoader.loadUrl returned null (Response Code: " << resCode << ", Response Msg: " << resMsg << ", Exception Msg: " << excMsg << ")";
		    throw std::runtime_error( ss.str() );
		}

		size_t dataLength = JniHelper::Get()->GetArrayLength( jBytes );
		jbyte* dataPtr = (jbyte*)JniHelper::Get()->GetByteArrayElements( jBytes, NULL );
		if( nullptr == dataPtr ) {
			int resCode = getResponseCode();
			std::string resMsg = getResponseMsg();
			std::string excMsg = getExceptionMsg();
			std::stringstream ss;
			ss << "failed to get byte array (Response Code: " << resCode << ", Response Msg: " << resMsg << ", Exception Msg: " << excMsg << ")";
		    throw std::runtime_error( ss.str() );
		}

		if( dataLength > 0 ) {
			result = ci::Buffer::create( dataLength );
			memcpy( (void *)result->getData(), (const void *)dataPtr, dataLength );
		}

		JniHelper::Get()->ReleaseByteArrayElements( jBytes, dataPtr, 0 );
		JniHelper::Get()->DeleteLocalRef( jstrUrl );
	}

	return result;
}
Exemple #2
0
void dispatchUpdateAndDisplay(DISPATCH_STATUS_TYPE newStatus,
			      DISPATCH_PTR dispatch)
{
  const char *Data;
  CONST_FORMAT_PTR Format;
  BOOLEAN ignored;
  BOOLEAN freeStruct = FALSE, keepStruct = FALSE;
  
  if (x_ipc_LogMessagesP()) {
    ignored = x_ipc_LogIgnoreP() && Ignore_Logging_Message(dispatch->msg);
    if (!ignored || !LogIgnoreAllP()) {
      if (ignored) Start_Ignore_Logging();
    
      dispatchUpdateAndDisplay1(newStatus, dispatch);
    
      if ((newStatus == AttendingDispatch || dispatch->msg_class == ReplyClass)
	  && x_ipc_LogDataP()) {
      
	if (dispatch->msg) {
	  Data = NULL;
	  if (newStatus == HandledDispatch) {
	    MSG_PTR replyMsg;
#ifdef NMP_IPC
	    if (ONE_WAY_MSG(dispatch->msg) && dispatch->resData->classData) {
	      replyMsg = getResponseMsg(dispatch->resData);
	      Format = replyMsg->msgData->msgFormat;
	    } else
#endif
	      {
		replyMsg = dispatch->msg;
		Format = dispatch->msg->msgData->resFormat;
	      }
	    parseMsgFormats(replyMsg); /* In case not yet parsed */
	    if (Format != NULL) {
	      if ( (dispatch->resData) && (dispatch->resData->dataStruct)) {
		/* This is a central message, since the data is already here.  */
		freeStruct = FALSE;
		keepStruct = TRUE;
		Data = dispatch->resData->dataStruct;
	      } else {
		Data = dispatchDecodeData(Format, dispatch->resData, 
					  &freeStruct);
	      }
#ifdef NMP_IPC
	      if (Data && ONE_WAY_MSG(replyMsg) &&
		  replyMsg->msgData->resFormat) {
		log_IPC_Data(replyMsg, Data, dispatch->resData, freeStruct);
	      } else
#endif
		{ 
		  Log_Data(Format, Data, 4);
		  if (Data && freeStruct && 
		      (Data != dispatch->resData->msgData)) {
		    /* free decoded data, including all its subelements */
		    x_ipc_freeDataStructure(Format, (void *)Data);
		    Data = NULL;
		  } else if ((dispatch->resData) && !keepStruct) {
		    dispatch->resData->dataStruct = NULL;
		  }
		}
	    }
	  } else {
	    Format = dispatch->msg->msgData->msgFormat;
	    if (Format != NULL) {
	      Data = dispatchDecodeData(Format, dispatch->msgData, &freeStruct);
#ifdef NMP_IPC
	      if (Data && ONE_WAY_MSG(dispatch->msg) &&
		  dispatch->msg->msgData->resFormat) {
		log_IPC_Data(dispatch->msg, Data, dispatch->msgData, freeStruct);
	      } else
#endif
		{ 
		  Log_Data(Format, Data, 4);
		  if (Data && freeStruct && (Data != dispatch->msgData->msgData)){
		    /* free decoded data, including all its subelements */
		    x_ipc_freeDataStructure(Format, (void *)Data);
		  } else if (dispatch->msgData) {
		    dispatch->msgData->dataStruct = NULL;
		  }
		  Data = NULL;
		}
	    }
	  }
	}
      }
      if (ignored) End_Ignore_Logging();
    }
  }
  DISPATCH_SET_STATUS(newStatus, dispatch);
}