2017-12-31 37 views
0

일부 C++ 라이브러리를 반응 네이티브 모듈로 래핑하는 데 관심이 있습니다. 그러나 개념적 벽을 조금 치고 있습니다. 이 물건에 아주 새롭 그래서 나와 곰!React Native - 네이티브 모듈로 생성 된 네이티브 객체 래핑

는 I 오디오 프로세싱 그래프를 형성하지만 API의 큰 구성 요소가 서로에 오디오 노드 오브젝트를 연결하는

Juce https://juce.com/doc/classAudioProcessorGraph_1_1AudioGraphIOProcessor의 AudioProcessorGraph 기능과 같은 포장하고자. 당신은 웹 오디오 API를 매우 비슷한 것을 상상할 수 :

const audioCtx = new AudioContext(); 
const oscillator = new OscillatorNode(audioCtx); 
const gainNode = new GainNode(audioCtx); 

oscillator.connect(gainNode).connect(audioCtx.destination); 

심지어 한 줄의 코드를 작성하기 전에 내가보고 있어요 문제, 나는 RCT_EXPORT_METHOD 매크로에와있는 방법을 볼 수 없다는 것입니다 네이티브 객체의 인스턴스를 다른 네이티브 객체의 메소드 호출에 대한 인수로 전달합니다. https://nodejs.org/api/addons.html#addons_wrapping_c_objects ObjectWrap 기능을 사용하여 기본 노드 추가 기능과 비슷한 작업을 수행했습니다. 거기에 어쨌든 반응 네이티브와 비슷한 것을 달성 하는가?

답변

1

RCT_EXPORT_METHOD는 IOS에서 JS 측으로 함수를 내보내는 데 사용됩니다. 여기서주의해야 할 점은 JS를 통해 네이티브 또는 네이티브에서 JS로 전달하는 인수는 직렬화 가능해야한다는 것입니다. 이는 비동기 방식으로 RN 브리지를 통해 통신이 이루어지기 때문입니다.

이것은 내가 귀하의 경우에 수행하는 것입니다. 예 걸릴 수 있습니다 :

것은 당신이 유

그래서 다음 기능 네이티브 모듈 얘기하는 데 사용할 수있는 참조를 가지고있는 JS 측에

//Initialise a list to store audioContexts 
ArrayList<AudioContext> audioCtxList = new ArrayList<AudioContext>(); 

@ReactMethod 
public void createAudioContext(Callback cb){ 
AudioContext audioCtx = new AudioContext(); 
audioCtxList.add(audioCtx); 
cb.invoke(//...index of the newly created audioCtx) 
} 

이제 네이티브 모듈의 기능을 가지고 말할 수 있습니다 비슷한 모양을 보일 것입니다

@ReactMethod 
public void createOscillator(int audioCtxId){ 
AudioCtx actx = // Get the audioContext from the list using the audioCtxId 
const oscillator = new OscillatorNode(audioCtx); 
const gainNode = new GainNode(audioCtx); 
oscillator.connect(gainNode).connect(audioCtx.destination); 
} 

결과적으로 네이티브 개체를 JS 측으로 내보낼 필요가 없으며 필요한 기능을 수행 할 수 있습니다.

+0

감사합니다. 이 질문을 게시 한 이후 체크 아웃 한 몇 가지 오픈 소스 프로젝트에서 사용 된 유사한 패턴을 보았습니다. 지금이 접근법과 함께 갈 것입니다. 저는이 방법으로 라이브러리를 포장하고 싶습니다. 아마도 일종의 오픈 소스 라이브러리로 개선 될 수있는 무언가 일 것입니다. 리액션 브리지 레벨에서 구현 된 오브젝트 랩핑을 보려면 매우 멋지 겠지만 현재 아키텍처에 대한 제한 사항이 무엇인지 알기에는 충분하지 않습니다. – ramirezd42