2017-01-12 14 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#は動的署名を許可していませんので、私は

要求のように、可能な各タイプのためのシグネチャを定義する必要があると思います コールをリクエストする(文字列メソッド、文字列a、int b) ...

今日、私は物事を簡単にして、私が望むものは、パの代わりに私はパラメータを構築するコールバックメソッドを渡すだろう。その後、結果はシリアル化されます。

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

しかし、デリゲートが依然として私をどこにも連れてこない特定のリターンタイプを持っていなければならないので、あまり役に立ちません。

どうすればいいですか?

答えて

1

のparamsキーワード

あなたが探していることは、あなたが関数のパラメータの任意の番号を持つことができますされ、C# params keywordあるようですね。あなたのパラメータのタイプも異なるので、objectをキャッチオールとして使うこともできます。したがって、このように:

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の最初の実装を終了することができます。 –

関連する問題