void IConnectionEventSink.NotifyStateTransition( DebugClient client, DebugClientState oldState, DebugClientState newState) { sink.NotifyStateTransition(client, oldState, newState); }
private bool Initialize(IMessageEventSink sink) { this.sink = sink; eventHandlingThread = Task.Run(() => EventHandlingThread()); client = DebugClient.Create(this); if (client == null) { return(false); } return(true); }
void IConnectionEventSink.NotifyMessageReceived( DebugClient client, string messageType, byte[] messageParams) { if (client != this.client || Disposing) { return; } var msg = Message.Deserialize(messageType, messageParams); if (msg == null) { return; } if (msg is Response) { var msgResponse = msg as Response; EnterCriticalSection(); PendingRequest pendingRequest = null; if (pendingRequests.TryGetValue(msgResponse.RequestSeq, out pendingRequest)) { pendingRequests.Remove(msgResponse.RequestSeq); LeaveCriticalSection(); pendingRequest.SetResponse(msgResponse); sink.NotifyRequestResponded(pendingRequest.Request); pendingRequest.Dispose(); } else { LeaveCriticalSection(); sink.NotifyMessage(msg); } } else if (msg is Event) { var msgEvent = msg as Event; eventQueue.Enqueue(msgEvent); eventReceived.Set(); } else { sink.NotifyMessage(msg); } }
public static DebugClient Create(IConnectionEventSink sink) { var _this = new DebugClient(); return(_this.Initialize(sink) ? _this : null); }