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;
			}
		}
예제 #2
0
		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);
					}
				}
			}
		}