void HandleEvent(V8Event @event) { var body = @event.body as JObject; switch (@event.eventType) { case "initialized": break; case "output": break; case "thread": var threadEvent = body.ToObject<ThreadEvent> (); var threadId = threadEvent.threadId; if (threadEvent.reason == "started" && ThreadStarted != null) ThreadStarted (threadEvent.threadId); if (threadEvent.reason == "exited" && ThreadExited != null) ThreadExited (threadEvent.threadId); break; case "stopped": var stoppedEvent = body.ToObject<StoppedEvent> (); if (stoppedEvent.reason == "breakpoint") { if (BreakpointHit != null) BreakpointHit (stoppedEvent.source.path, stoppedEvent.line); } break; default: requestException = new BadRequest ("Unhandled event '" + @event.eventType + "'"); break; } }
private void Dispatch(string body) { var requestOrResponse = JsonConvert.DeserializeObject<dynamic>(body); if (requestOrResponse != null) { if (requestOrResponse.type == "response") { var response = new V8Response(requestOrResponse); //var response = JsonConvert.DeserializeObject<V8Response>(body); int seq = response.request_seq; lock (_pendingRequests) { if (_inTimeoutMode) { _inTimeoutMode = false; Callback.Invoke(new V8Event("diagnostic", new { reason = "responsive" })); } if (_pendingRequests.ContainsKey(seq)) { var tcs = _pendingRequests[seq]; _pendingRequests.Remove(seq); tcs.SetResult(response); } } } else if (requestOrResponse.type == "event") { if (Callback != null) { var ev = new V8Event(requestOrResponse); //var ev = JsonConvert.DeserializeObject<V8Event>(body); Callback.Invoke(ev); } } } }