Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit b743a58

Browse files
committed
Error handling for tipeeestream connector
1 parent d47a7dc commit b743a58

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/tipeeestream/TipeeeStreamConnector.scala

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.codeoverflow.chatoverflow.requirement.service.tipeeestream
22

3+
import java.util.Calendar
34
import java.util.function.Consumer
45

56
import io.socket.client.{IO, Socket}
@@ -21,22 +22,45 @@ class TipeeeStreamConnector(override val sourceIdentifier: String) extends Conne
2122
private val username = "username"
2223
override protected var requiredCredentialKeys: List[String] = List(apiKey, username)
2324
override protected var optionalCredentialKeys: List[String] = List()
24-
private var socket: Socket = _
25+
private var socket: Option[Socket] = None
26+
private val TIMEOUT = 10000
2527

2628
/**
2729
* Starts the connector, e.g. creates a connection with its platform.
2830
*/
2931
override def start(): Boolean = {
30-
socket = IO.socket("https://sso-cf.tipeeestream.com").connect()
31-
socket.on("connect", (_: Any) => {
32+
//TODO test error handling
33+
var connected: Option[Boolean] = None
34+
val thread = Thread.currentThread
35+
socket.get.on(Socket.EVENT_CONNECT, (_: Any) => {
3236
logger info "Connected to TipeeStream Socket.io"
37+
socket.get.emit("join-room", getAuthenticationObject)
38+
logger info "emitted credentials to TipeeSetream Socket.io api"
39+
socket.get.on("new-event", (objects: Array[AnyRef]) => {
40+
serializeObjectToObject(objects)
41+
})
42+
connected = Some(true)
43+
connected.notifyAll()
3344
})
34-
socket.emit("join-room", getAuthenticationObject)
35-
logger info "emitted credentials to TipeeSetream Socket.io api"
36-
socket.on("new-event", (objects: Array[AnyRef]) => {
37-
serializeObjectToObject(objects)
45+
socket.get.on(Socket.EVENT_CONNECT_ERROR, (e: Any) => {
46+
logger warn s"Could not connect to TipeeeStream socket:"
47+
logger warn e.asInstanceOf[Array[Object]].mkString(",")
48+
connected = Some(false)
49+
connected.notifyAll()
50+
})
51+
socket.get.on(Socket.EVENT_CONNECT_TIMEOUT, (_: Any) => {
52+
logger warn s"$sourceIdentifier socket timed out"
53+
})
54+
socket.get.on(Socket.EVENT_ERROR, (e: Any) => {
55+
logger warn s"$sourceIdentifier socket error:"
56+
logger warn e.asInstanceOf[Array[Object]].mkString(",")
57+
})
58+
val start = Calendar.getInstance.getTimeInMillis
59+
while (connected.isEmpty && start + TIMEOUT > Calendar.getInstance.getTimeInMillis) connected.wait(TIMEOUT)
60+
connected.getOrElse({
61+
logger warn "Could not connect to TipeeeStream socket: Timed out!"
62+
false
3863
})
39-
true
4064
}
4165

4266
def addIncomingEventHandler(handler: Consumer[TipeeeStreamEvent]): Unit = {
@@ -91,7 +115,7 @@ class TipeeeStreamConnector(override val sourceIdentifier: String) extends Conne
91115
* This stops the activity of the connector, e.g. by closing the platform connection.
92116
*/
93117
override def stop(): Boolean = {
94-
socket.close()
118+
socket.foreach(_.close())
95119
true
96120
}
97121

0 commit comments

Comments
 (0)