blob: 59ad575f7412ed3adc29d1486b42cc45c9f9f5e1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package com.github.jodersky.flow
package internal
import akka.actor.{ Actor, ActorRef }
import akka.util.ByteString
import java.nio.ByteBuffer
class Reader(serial: SerialConnection, buffer: ByteBuffer, operator: ActorRef, client: ActorRef) extends Thread {
def readLoop() = {
var stop = false
while (!serial.isClosed && !stop) {
try {
buffer.clear()
val length = serial.read(buffer)
buffer.limit(length)
val data = ByteString.fromByteBuffer(buffer)
client.tell(Serial.Received(data), operator)
} catch {
//don't do anything if port is interrupted
case ex: PortInterruptedException => {}
//stop and tell operator on other exception
case ex: Exception => {
stop = true
operator.tell(ThreadDied(this, ex), Actor.noSender)
}
}
}
}
override def run() {
this.setName("flow-reader " + serial.port)
readLoop()
}
}
|