equal
deleted
inserted
replaced
230 /* global state */ |
230 /* global state */ |
231 |
231 |
232 private val syslog = new Session.Syslog(syslog_limit) |
232 private val syslog = new Session.Syslog(syslog_limit) |
233 def syslog_content(): String = syslog.content |
233 def syslog_content(): String = syslog.content |
234 |
234 |
235 @volatile private var _phase: Session.Phase = Session.Inactive |
235 private val _phase = Synchronized[Session.Phase](Session.Inactive) |
236 private def phase_=(new_phase: Session.Phase) |
236 private def phase_=(new_phase: Session.Phase) |
237 { |
237 { |
238 _phase = new_phase |
238 _phase.change(_ => { phase_changed.post(new_phase); new_phase }) |
239 phase_changed.post(new_phase) |
239 } |
240 } |
240 def phase = _phase.value |
241 def phase = _phase |
|
242 def is_ready: Boolean = phase == Session.Ready |
241 def is_ready: Boolean = phase == Session.Ready |
243 |
242 |
244 private val global_state = Synchronized(Document.State.init) |
243 private val global_state = Synchronized(Document.State.init) |
245 def current_state(): Document.State = global_state.value |
244 def current_state(): Document.State = global_state.value |
246 |
245 |
526 |
525 |
527 case input: Prover.Input => |
526 case input: Prover.Input => |
528 all_messages.post(input) |
527 all_messages.post(input) |
529 |
528 |
530 case Start(start_prover) if !prover.defined => |
529 case Start(start_prover) if !prover.defined => |
531 phase match { |
530 prover.set(start_prover(manager.send(_))) |
532 case Session.Inactive | Session.Terminated(_) => |
|
533 phase = Session.Startup |
|
534 prover.set(start_prover(manager.send(_))) |
|
535 case _ => |
|
536 } |
|
537 |
531 |
538 case Stop => |
532 case Stop => |
539 if (prover.defined && is_ready) { |
533 if (prover.defined && is_ready) { |
540 _protocol_handlers.change(_.stop(prover.get)) |
534 _protocol_handlers.change(_.stop(prover.get)) |
541 global_state.change(_ => Document.State.init) |
535 global_state.change(_ => Document.State.init) |
597 def snapshot(name: Document.Node.Name = Document.Node.Name.empty, |
591 def snapshot(name: Document.Node.Name = Document.Node.Name.empty, |
598 pending_edits: List[Text.Edit] = Nil): Document.Snapshot = |
592 pending_edits: List[Text.Edit] = Nil): Document.Snapshot = |
599 global_state.value.snapshot(name, pending_edits) |
593 global_state.value.snapshot(name, pending_edits) |
600 |
594 |
601 def start(start_prover: Prover.Receiver => Prover) |
595 def start(start_prover: Prover.Receiver => Prover) |
602 { manager.send(Start(start_prover)) } |
596 { |
|
597 _phase.change( |
|
598 { |
|
599 case Session.Inactive => |
|
600 manager.send(Start(start_prover)) |
|
601 Session.Startup |
|
602 case phase => error("Cannot start prover in phase " + quote(phase.print)) |
|
603 }) |
|
604 } |
603 |
605 |
604 def stop() |
606 def stop() |
605 { |
607 { |
606 delay_prune.revoke() |
608 delay_prune.revoke() |
607 manager.send_wait(Stop) |
609 manager.send_wait(Stop) |