11package org .codeoverflow .chatoverflow .requirement .service .tipeeestream
22
3+ import java .util .Calendar
34import java .util .function .Consumer
45
56import 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