Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 28 additions & 21 deletions Json-Rpc/JsonRpcProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,41 @@ namespace AustinHarris.JsonRpc
{
public static class JsonRpcProcessor
{
public static void Process(JsonRpcStateAsync async, object context = null)
public static void Process(JsonRpcStateAsync async, object context = null,
JsonSerializerSettings settings = null)
{
Process(Handler.DefaultSessionId(), async, context);
Process(Handler.DefaultSessionId(), async, context, settings);
}

public static void Process(string sessionId, JsonRpcStateAsync async, object context = null)
public static void Process(string sessionId, JsonRpcStateAsync async, object context = null,
JsonSerializerSettings settings = null)
{
Process(sessionId, async.JsonRpc, context)
Process(sessionId, async.JsonRpc, context, settings)
.ContinueWith(t =>
{
async.Result = t.Result;
async.SetCompleted();
});
{
async.Result = t.Result;
async.SetCompleted();
});
}
public static Task<string> Process(string jsonRpc, object context = null)

public static Task<string> Process(string jsonRpc, object context = null,
JsonSerializerSettings settings = null)
{
return Process(Handler.DefaultSessionId(), jsonRpc, context);
return Process(Handler.DefaultSessionId(), jsonRpc, context, settings);
}
public static Task<string> Process(string sessionId, string jsonRpc, object context = null)
{

public static Task<string> Process(string sessionId, string jsonRpc, object context = null,
JsonSerializerSettings settings = null)
{
return Task<string>.Factory.StartNew((_) =>
{
var tuple = (Tuple<string, string, object>)_;
return ProcessInternal(tuple.Item1, tuple.Item2, tuple.Item3);
}, new Tuple<string, string, object>(sessionId, jsonRpc, context));
var tuple = (Tuple<string, string, object, JsonSerializerSettings>)_;
return ProcessInternal(tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4);
}, new Tuple<string, string, object, JsonSerializerSettings>(sessionId, jsonRpc, context, settings));
}

private static string ProcessInternal(string sessionId, string jsonRpc, object jsonRpcContext)
private static string ProcessInternal(string sessionId, string jsonRpc, object jsonRpcContext,
JsonSerializerSettings settings = null)
{
var handler = Handler.GetSessionHandler(sessionId);

Expand All @@ -50,20 +57,20 @@ private static string ProcessInternal(string sessionId, string jsonRpc, object j
{
if (isSingleRpc(jsonRpc))
{
var foo = JsonConvert.DeserializeObject<JsonRequest>(jsonRpc);
var foo = JsonConvert.DeserializeObject<JsonRequest>(jsonRpc, settings);
batch = new[] { foo };
}
else
{
batch = JsonConvert.DeserializeObject<JsonRequest[]>(jsonRpc);
batch = JsonConvert.DeserializeObject<JsonRequest[]>(jsonRpc, settings);
}
}
catch (Exception ex)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(new JsonResponse
{
Error = handler.ProcessParseException(jsonRpc, new JsonRpcException(-32700, "Parse error", ex))
});
}, settings);
}

if (batch.Length == 0)
Expand All @@ -72,7 +79,7 @@ private static string ProcessInternal(string sessionId, string jsonRpc, object j
{
Error = handler.ProcessParseException(jsonRpc,
new JsonRpcException(3200, "Invalid Request", "Batch of calls was empty."))
});
}, settings);
}

var singleBatch = batch.Length == 1;
Expand Down Expand Up @@ -156,7 +163,7 @@ private static string ProcessInternal(string sessionId, string jsonRpc, object j
sbResult = new StringBuilder("[");
}

sbResult.Append(JsonConvert.SerializeObject(jsonResponse));
sbResult.Append(JsonConvert.SerializeObject(jsonResponse, settings));
if (i < batch.Length - 1)
{
sbResult.Append(',');
Expand Down