FJavaClassObject::FJavaClassObject(FName ClassName, const char* CtorSig, ...) { JNIEnv* JEnv = FAndroidApplication::GetJavaEnv(); Class = FAndroidApplication::FindJavaClass(ClassName.GetPlainANSIString()); check(Class); jmethodID Constructor = JEnv->GetMethodID(Class, "<init>", CtorSig); check(Constructor); va_list Params; va_start(Params, CtorSig); jobject object = JEnv->NewObjectV(Class, Constructor, Params); va_end(Params); VerifyException(); check(object); // Promote local references to global Object = JEnv->NewGlobalRef(object); JEnv->DeleteLocalRef(object); }
bool OSVRInterface::Init(OSVR_ClientContext OSVRClientContext, const FName& InterfaceName) { bool Result(true); #if OSVR_ENABLED OSVR_ReturnCode ReturnCode = osvrClientGetInterface(OSVRClientContext, InterfaceName.GetPlainANSIString(), &OSVRClientInterface); Result = ReturnCode == OSVR_RETURN_SUCCESS; this->OSVRClientContext = OSVRClientContext; RefreshCapabilities(); RegisterCallbacks(); #endif // OSVR_ENABLED Name = InterfaceName; return Result; }
void UOscFunctionLibrary::SendOsc(FName Address, const TArray<FOscDataElemStruct> & Data, int32 TargetIndex) { if(Address.GetDisplayNameEntry()->IsWide()) { const auto tmp = Address.GetPlainNameString(); UE_LOG(LogOSC, Error, TEXT("Invalid OSC address \"%s\": ASCII only"), *tmp); return; } static_assert(sizeof(uint8) == sizeof(char), "Cannot cast uint8 to char"); uint8 buffer[1024]; osc::OutboundPacketStream output((char *)buffer, sizeof(buffer)); output << osc::BeginMessage(Address.GetPlainANSIString()); for(const auto & elem : Data) { if(elem.IsFloat()) { output << (float)elem.AsFloatValue(); } else if(elem.IsInt()) { output << (int32)elem.AsIntValue(); } else if(elem.IsBool()) { output << elem.AsBoolValue(); } else if(elem.IsString()) { output << elem.AsStringValue().GetPlainANSIString(); } } output << osc::EndMessage; check(reinterpret_cast<const void *>(buffer) == reinterpret_cast<const void *>(output.Data())); GetMutableDefault<UOscSettings>()->Send(buffer, output.Size(), TargetIndex); }