2017-01-12 8 views
1

즉, Unity3d (모노)에 대한 JSONRPC2 API를 NodeJS 서버에 구현하려고합니다.RPC 용 동적 서명

나는 C#을 처음 접했고 나는 내가 할 수있는 일이 거의 불가능하다고 생각한다. 당신이 볼 수 있듯이

JSONRequest request = new JSONRequest(); 
JSONNode jsonParams = new JSONNode(); 
.... 
request.params = jsonParams; 
socket.Send(request.toJSON()); 

가하는 RPC에 전화를 거는 것은 매우 상세하고이 모든 입력됩니다 것은 약간의 시간이 소요 :

현재 내가 같은 것을 할 수 있습니다. 내가 가지고 싶은 무엇

이 같은 것입니다 :

req = rpc.call('add', 1, 2); 
req.success += SuccessCallback 
req.error += ErrorCallback 

C#을 동적 서명을 허용하지 않기 때문에, 나는

요청처럼 가능한 각 유형에 대한 서명을 정의해야 할 것 전화 (문자열 방법, int로 A, INT 나) 요청 호출 (문자열 방법, 문자열 A, INT 나) ... 그래서

오늘은 일을 작성하는 간단하고 꽤 가까운 만들 것이 아이디어와 함께 내가 뭘 원하는지, 대신에 파 매개 변수를 작성하는 콜백 메소드를 전달합니다. 그런 다음 결과가 직렬화됩니다.

rpc.call("add",() => [1, 2]) 

그러나 델리게이트가 아직 아무데도 데려다주지 않는 특정 반환 유형을 가지고 있기 때문에 도움이되지 않는다고 생각합니다.

어떻게하면됩니까?

답변

1

에 Params 키워드

당신이 찾고있는 것은 당신이 함수에 대한 매개 변수의 번호를 가지고 할 수있는의 C# params keyword처럼 들린다. 매개 변수의 유형도 다양하기 때문에 object을 모두 catch로 사용할 수도 있습니다. 그래서,이 같은 :

rpc.call("hello", "first", 2, "third"); 
+0

그것은 바로 내가 찾던 같은 소리 :

public void call (string method, params object[] args) { // Any number of any type // Create the request: JSONRequest request = new JSONRequest(); JSONNode jsonParams = new JSONNode(); // For each arg: foreach (object argument in args) { // (guessing JSONNode here - I don't know if it has 'Add') jsonParams.Add(argument); } request.params = jsonParams; } 

당신에게 원래의 의도 된 사용주기. C/C++에서 줄임표와 거의 같다라고 생각하는 것이 맞습니까? –

+0

@ LoïcFaure-Lacroix 네, 매우 비슷합니다. 타입 제한을 지정할 수있는 확장 기능 만 있습니다. (특수 처리가 필요하지 않고 일반적인 C# 배열입니다.) –

+0

훌륭한 작품입니다. jsonrpc2의 첫 번째 구현을 마칠 수있었습니다. –