Пример #1
0
        private void ProcessIncomingMessage(ConnectionResponse obj)
        {
            if (!obj.Params.HasValue)
            {
                GetSession(obj.SessionId ?? string.Empty)?.OnMessage(obj);
                return;
            }

            var param = ChromiumProtocolTypes.ParseEvent(obj.Method, obj.Params.Value.GetRawText());

            if (obj.Id == BrowserCloseMessageId)
            {
                return;
            }

            if (param is TargetAttachedToTargetChromiumEvent targetAttachedToTarget)
            {
                string          sessionId = targetAttachedToTarget.SessionId;
                ChromiumSession session   = new ChromiumSession(this, targetAttachedToTarget.TargetInfo.GetTargetType(), sessionId);
                _asyncSessions.AddItem(sessionId, session);
            }
            else if (param is TargetDetachedFromTargetChromiumEvent targetDetachedFromTarget)
            {
                string sessionId = targetDetachedFromTarget.SessionId;
                if (_sessions.TryRemove(sessionId, out var session) && !session.IsClosed)
                {
                    session.OnClosed(targetDetachedFromTarget.InternalName);
                }
            }

            GetSession(obj.SessionId ?? string.Empty).OnMessageReceived(param);
        }
Пример #2
0
        internal void OnMessage(ConnectionResponse obj)
        {
            int?id = obj.Id;

            if (id.HasValue && _callbacks.TryRemove(id.Value, out var callback))
            {
                if (obj.Error != null)
                {
                    callback.TaskWrapper.TrySetException(new MessageException(callback, obj.Error));
                }
                else
                {
                    var result = ChromiumProtocolTypes.ParseResponse(callback.Method, obj.Result?.GetRawText());
                    callback.TaskWrapper.TrySetResult(result);
                }
            }
        }