in src/csharp/Protocol.cs [213:246]
private void Dispatch(string req)
{
var message = JsonConvert.DeserializeObject<ProtocolMessage>(req);
if (message != null) {
switch (message.type) {
case "request":
{
var request = JsonConvert.DeserializeObject<Request>(req);
Program.Log(TRACE, "C {0}: {1}", request.command, JsonConvert.SerializeObject(request.arguments, Formatting.Indented));
var response = new Response(request);
DispatchRequest(request.command, request.arguments, response);
SendMessage(response);
}
break;
case "response":
{
var response = JsonConvert.DeserializeObject<Response>(req);
int seq = response.request_seq;
lock (_pendingRequests) {
if (_pendingRequests.ContainsKey(seq)) {
var tcs = _pendingRequests[seq];
_pendingRequests.Remove(seq);
tcs.SetResult(response);
}
}
}
break;
}
}
}