private void ProcessIncomingMessage(ConnectionResponse obj) { if (obj.Id == BrowserCloseMessageId) { return; } IFirefoxEvent param = null; if (obj.Params?.ValueKind == JsonValueKind.Object) { param = FirefoxProtocolTypes.ParseEvent(obj.Method, obj.Params.Value.GetRawText()); if (param is TargetAttachedToTargetFirefoxEvent targetAttachedToTarget) { string sessionId = targetAttachedToTarget.SessionId; var session = new FirefoxSession(this, targetAttachedToTarget.TargetInfo.Type.ToString(), sessionId, (id, request) => RawSendAsync(new ConnectionRequest { Id = id, Method = request.Command, Params = request, SessionId = sessionId, })); _asyncSessions.AddItem(sessionId, session); } else if (param is TargetDetachedFromTargetFirefoxEvent targetDetachedFromTarget) { string sessionId = targetDetachedFromTarget.SessionId; if (_sessions.TryRemove(sessionId, out var session)) { session.OnClosed(targetDetachedFromTarget.InternalName); } } } if (obj.SessionId != null) { GetSession(obj.SessionId)?.OnMessage(obj); } else if (obj.Id.HasValue && _callbacks.TryRemove(obj.Id.Value, out var callback)) { if (obj.Error != null) { callback.TaskWrapper.TrySetException(new MessageException(callback, obj.Error)); } else { callback.TaskWrapper.TrySetResult(FirefoxProtocolTypes.ParseResponse(callback.Method, obj.Result?.GetRawText())); } } else if (param != null) { MessageReceived?.Invoke(this, param); } }
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 = FirefoxProtocolTypes.ParseResponse(callback.Method, obj.Result?.GetRawText()); callback.TaskWrapper.TrySetResult(result); } } else if (obj.Params?.ValueKind == JsonValueKind.Object) { OnMessageReceived(this, FirefoxProtocolTypes.ParseEvent(obj.Method, obj.Params.Value.GetRawText())); } }