Пример #1
0
 private void PrepareAsyncState()
 {
     _outputReady = new AsyncCallback(OutputCallback);
     _outputState = new AsyncState(_standardOutput, _outputBuffer);
     _errorReady  = new AsyncCallback(ErrorCallback);
     _errorState  = new AsyncState(_standardError, _errorBuffer);
 }
Пример #2
0
        private void PrepareAsyncState(bool errorStream = false)
        {
            _outputReady = OutputCallback;
            _outputState = new AsyncState(_standardOutput, _outputBuffer);

            if (!errorStream)
            {
                return;
            }

            _errorReady = ErrorCallback;
            _errorState = new AsyncState(_standardError, _errorBuffer);
        }
Пример #3
0
        /// <summary>
        /// Callback for the error stream
        /// </summary>
        /// <param name="ar"></param>
        private void ErrorCallback(IAsyncResult ar)
        {
            AsyncState state = (AsyncState)ar.AsyncState;

            int count = state.Stream.BaseStream.EndRead(ar);

            if (count > 0)
            {
                Debug.WriteLine(Encoding.Default.GetString(state.Buffer));
                Debugger.Break();

                _standardError.BaseStream.BeginRead(
                    _errorBuffer, 0,
                    _errorBuffer.Length,
                    _errorReady,
                    _errorState
                    );
            }
        }
Пример #4
0
 private void PrepareAsyncState()
 {
     _outputReady = new AsyncCallback(OutputCallback);
     _outputState = new AsyncState(_standardOutput, _outputBuffer);
     _errorReady = new AsyncCallback(ErrorCallback);
     _errorState = new AsyncState(_standardError, _errorBuffer);
 }
Пример #5
0
        /// <summary>
        /// Gets executed if BeginRead() has red some data
        /// </summary>
        /// <param name="ar">Async Result</param>
        private void OutputCallback(IAsyncResult ar)
        {
            AsyncState state = (AsyncState)ar.AsyncState;

            int count = state.Stream.BaseStream.EndRead(ar);

            if (count > 0)
            {
                int readCount = 0;
                while (count > readCount)
                {
                    var data = Unpacking.UnpackObject(state.Buffer, readCount);
                    readCount += data.ReadCount;

                    if (!data.Value.IsArray)
                    {
                        Debugger.Break();
                    }

                    var dataList = data.Value.AsList().Select(x => new MessagePackObject(x)).ToList();

                    // Response message has 4 items in the array
                    if (dataList.Count == 4)
                    {
                        var type = (MessageType)dataList[0].AsInteger();
                        if (type != MessageType.Response)
                        {
                            Debugger.Break();
                        }

                        var msgId = dataList[1].AsInteger();

                        var err = dataList[2];
                        var res = dataList[3];

                        _tcs[msgId].SetResult(new[] { err, res });
                    }

                    // Notification message has 3 items in the array
                    else if (dataList.Count == 3)
                    {
                        var type = (MessageType)dataList[0].AsInteger();
                        if (type != MessageType.Notification)
                        {
                            Debugger.Break();
                        }

                        var func = dataList[1].AsString(Encoding.Default);

                        var res = dataList[2];

                        MsgPackNotificationEventArgs args = new MsgPackNotificationEventArgs
                        {
                            Method = func,
                            Params = res
                        };
                        OnNotificationReceived(args);
                    }

                    else
                    {
                        Debugger.Break();
                    }
                }

                Array.Clear(state.Buffer, 0, state.Buffer.Length);

                _standardOutput.BaseStream.BeginRead(
                    _outputBuffer, 0,
                    _outputBuffer.Length,
                    _outputReady,
                    _outputState
                    );
            }
        }