Skip to content

Commit 8b4fb32

Browse files
committed
Improve Logs and little bit of documentation
1 parent 6f6a541 commit 8b4fb32

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

backend/src/main/scala/de/knutwalker/wdcm/HandoutSystem.scala

+14-9
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object HandoutSystem {
2222

2323
def sendOutgoing: Source[BespokeMessage, Unit] =
2424
Source.actorRef[BespokeMessage](10, OverflowStrategy.dropTail)
25-
.mapMaterializedValue(ref => handoutActor ! NewViewer(ref.asInstanceOf[ActorRef[BespokeMessage]]))
25+
.mapMaterializedValue(ref handoutActor ! NewViewer(ref.asInstanceOf[ActorRef[BespokeMessage]]))
2626

2727
new HandoutSystem {
2828
def handoutFlow: Flow[Any, BespokeMessage, Unit] =
@@ -34,36 +34,41 @@ object HandoutSystem {
3434
}
3535

3636
private final class HandoutActor extends Actor with ActorLogging {
37-
private[this] var viewers = Set.empty[ActorRef[BespokeMessage]]
37+
private[this] var viewers = Set.empty[ActorRef[BespokeMessage]]
3838
private[this] var sequence = Vector.empty[BespokeMessage]
3939

4040
def receive: Receive = LoggingReceive {
41-
case NewViewer(ref)
41+
case NewViewer(ref)
4242
context watch ref.asInstanceOf[UntypedActorRef]
43-
sequence.foreach(ref ! _)
4443
viewers += ref
45-
case Terminated(ref)
44+
log.info(s"A new viewer joined, total of ${viewers.size } now")
45+
log.info(s"Replaying ${sequence.size } messages")
46+
sequence.foreach(ref ! _)
47+
case Terminated(ref)
4648
viewers -= ref.asInstanceOf[ActorRef[BespokeMessage]]
47-
case m: BespokeMessage.Activate
49+
log.info(s"A viewer left, total of ${viewers.size } now")
50+
case m: BespokeMessage.Activate
4851
sequence :+= m
4952
viewers.foreach(_ ! m)
50-
case m: BespokeMessage.Slide
53+
case m: BespokeMessage.Slide
5154
sequence :+= m
5255
viewers.foreach(_ ! m)
53-
case m: BespokeMessage.Prev
56+
case m: BespokeMessage.Prev
5457
sequence :+= m
5558
viewers.foreach(_ ! m)
56-
case m: BespokeMessage.Next
59+
case m: BespokeMessage.Next
5760
sequence :+= m
5861
viewers.foreach(_ ! m)
5962
case m@BespokeMessage.Deactivate(n)
6063
sequence :+= m
6164
viewers.foreach(_ ! m)
6265
case BespokeMessage.Connect
6366
sequence = Vector(BespokeMessage.Connect)
67+
log.info(s"Presenter joined, telling ${viewers.size } viewers to get ready")
6468
viewers.foreach(_ ! BespokeMessage.Connect)
6569
case BespokeMessage.Disconnect
6670
sequence = Vector()
71+
log.info(s"Presenter left, disconnecting from ${viewers.size } viewers")
6772
viewers.foreach(_ ! BespokeMessage.Disconnect)
6873
}
6974
}

frontend/src/main/scala/de/knutwalker/wdcm/Handout.scala

+23-1
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ case object Handout extends Plugin with Websockets {
2121
var active = -1
2222
var max = 0
2323

24+
// block requests to a certain slide if it was not yet seen
2425
deck.on("slide", (e: BespokeEvent) e.index <= max)
26+
27+
// block requests to the next slide if it was not yet seen
2528
deck.on("next", (e: BespokeEvent) e.index < max)
29+
30+
// block requests to a certain slide if it was not yet seen
2631
deck.on("activate", (e: BespokeEvent) (e.index <= max) && {
2732
Toastr.clear()
2833
active = e.index
@@ -33,16 +38,26 @@ case object Handout extends Plugin with Websockets {
3338
val data = TypedArrayBuffer.wrap(wsMsg.data.asInstanceOf[ArrayBuffer])
3439
val message = unpickler.fromBytes(data)
3540
message match {
41+
42+
// next is only processed if the handout is on the correct slide
3643
case BespokeMessage.Next(n) if n == active
3744
max = js.Math.max(n, max)
3845
deck.next()
46+
47+
// prev is only processed if the handout is on the correct slide
3948
case BespokeMessage.Prev(n) if n == active
4049
max = js.Math.max(n, max)
4150
deck.prev()
42-
case BespokeMessage.Slide(n) if n != active
51+
52+
// slide is always processed, as it signals a forced jump by the presenter
53+
case BespokeMessage.Slide(n) if n != active
4354
max = js.Math.max(n, max)
4455
Toastr.remove()
4556
deck.slide(n)
57+
58+
// activate happens when the presenter proceeds to the next slide.
59+
// it is only processed when the target is not already the current slide
60+
// and it only applies automatically if the slide would be the next one
4661
case BespokeMessage.Activate(n) if n != active
4762
max = js.Math.max(n, max)
4863
val delta = n - previousPresenter
@@ -52,13 +67,20 @@ case object Handout extends Plugin with Websockets {
5267
} else toast(active, n) {
5368
deck.slide(n)
5469
}
70+
71+
// save which page the presenter moved away from to determine the
72+
// direction they are going
5573
case BespokeMessage.Deactivate(n)
5674
previousPresenter = n
75+
76+
// connect signals a new presenter, so reset everything to zero
5777
case BespokeMessage.Connect
5878
max = 0
5979
active = 0
6080
deck.slide(0)
6181
Toastr.clear()
82+
83+
// don't handle other events (and don't fail when they arrive)
6284
case otherwise
6385
}
6486
}

0 commit comments

Comments
 (0)