 	private var watchingVariables: Bool = false
 	///queue used for delegate calls
 	private let delegateQueue: DispatchQueue
-	/// queue used for app server messages
+	/// queue used for serializing app server incoming messages
 	private let appIncomingQueue: DispatchQueue
+	/// queue used for serializing app server outgoing messages
+	private let appOutgoingQueue: DispatchQueue
+	/// outgoing messages to send once status is running
+	private var preRunningRequests: [SessionCommand]? = []
+	
 	private let (sessionLifetime, sessionToken) = Lifetime.make()
 	public var lifetime: Lifetime { return sessionLifetime }
 	

		self.imageCache = imageCache
		self.delegateQueue = queue
		self.appIncomingQueue = DispatchQueue(label: "session.appserver.incoming", qos: .userInitiated, target: .global(qos: .userInitiated))
		var ws = wsWorker
		if nil == ws {
			ws = SessionWebSocketWorker(conInfo: connectionInfo, wspaceId: workspace.wspaceId)

	public weak var delegate: SessionDelegate?
	/// status of compute engine
	public private(set) var computeStatus: SessionResponse.ComputeStatus = .initializing
	public var computeIsRunning: Bool { return computeStatus == .running }
	
	
	// swiftlint:disable:next force_try
	public var project: AppProject { return try! conInfo.project(withId: workspace.projectId) }
