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);
            }
        }
Exemple #4
0
        public static DebugClient Create(IConnectionEventSink sink)
        {
            var _this = new DebugClient();

            return(_this.Initialize(sink) ? _this : null);
        }