 	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) }

	func send(command: SessionCommand) -> Bool {
		do {
			let data = try conInfo.encode(command)
			let cmdStr = String(data: data, encoding:.utf8) ?? "foo"
			Log.info("sending:\n \(cmdStr)")
			self.webSocketWorker.send(data: data)
		} catch let err as NSError {
			Log.error("error sending message on websocket: \(err)", .session)
			return false
		}
		return true
	}
	
	private func webSocketStatusChanged(status: SessionWebSocketWorker.SocketStatus) {

	private var watchingVariables: Bool = false
	///queue used for delegate calls
	private let delegateQueue: DispatchQueue
	/// 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 }
	
