Skip to content

Commit d65bdf4

Browse files
committed
move handling of incoming response to DocileConnection
1 parent 04dafac commit d65bdf4

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

core/src/main/scala/chargepoint/docile/dsl/CoreOps.scala

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,7 @@ trait CoreOps[
5959
* @tparam Q
6060
*/
6161
def send[Q <: OutReq](req: Q)(implicit reqRes: OutReqRes[Q, _ <: InRes]): Unit =
62-
connection.ocppClient match {
63-
case None =>
64-
throw ExpectationFailed("Trying to send an OCPP message while not connected")
65-
case Some (client) =>
66-
outgoingLogger.info(s"$req")
67-
client.send(req)(reqRes) onComplete {
68-
case Success(res) =>
69-
incomingLogger.info(s"$res")
70-
connection.receivedMsgManager.enqueue(
71-
IncomingMessage(res)
72-
)
73-
case Failure(OcppException(ocppError)) =>
74-
incomingLogger.info(s"$ocppError")
75-
connection.receivedMsgManager.enqueue(
76-
IncomingMessage(ocppError)
77-
)
78-
case Failure(e) =>
79-
opsLogger.error(s"Failed to get response to outgoing OCPP request $req: ${e.getMessage}\n\t${e.getStackTrace.mkString("\n\t")}")
80-
throw ExecutionError(e)
81-
}
82-
}
62+
connection.sendRequestAndManageResponse(req)
8363

8464
// WIP an operation to add a default handler for a certain subset of incoming messages
8565
def handlingIncomingMessages[T](proc: IncomingMessageProcessor[_])(f: => T): T = {

core/src/main/scala/chargepoint/docile/dsl/GenericIncomingMessage.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ object GenericIncomingMessage {
2222
InReq <: Request,
2323
OutRes <: Response,
2424
InReqRes[_ <: InReq, _ <: OutRes] <: ReqRes[_, _]
25-
](res: InRes)(
26-
): IncomingResponse[
25+
](res: InRes): IncomingResponse[
2726
OutReq,
2827
InRes,
2928
OutReqRes,

core/src/main/scala/chargepoint/docile/dsl/OcppTest.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import javax.net.ssl.SSLContext
99
import scala.language.higherKinds
1010
import scala.concurrent.{Await, ExecutionContext, Future, Promise}
1111
import scala.concurrent.duration.DurationInt
12+
import scala.util.{Failure, Success}
1213
import com.thenewmotion.ocpp.{Version, Version1X, VersionFamily}
1314
import com.thenewmotion.ocpp.json.api._
1415
import com.thenewmotion.ocpp.messages.{ReqRes, Request, Response}
@@ -17,6 +18,7 @@ import com.thenewmotion.ocpp.messages.v20._
1718
import com.typesafe.scalalogging.Logger
1819
import org.slf4j.LoggerFactory
1920

21+
2022
trait OcppTest[VFam <: VersionFamily] {
2123

2224
// these type variables are filled in differently for OCPP 1.X and OCPP 2.0
@@ -240,6 +242,32 @@ trait DocileConnection[
240242
ocppClient = Some(connection)
241243
}
242244

245+
def sendRequestAndManageResponse[REQ <: OutgoingReqBound](req: REQ)(
246+
implicit reqRes: OutgoingReqRes[REQ, _ <: IncomingResBound],
247+
executionContext: ExecutionContext
248+
): Unit =
249+
ocppClient match {
250+
case None =>
251+
throw ExpectationFailed("Trying to send an OCPP message while not connected")
252+
case Some(client) =>
253+
outgoingLogger.info(s"$req")
254+
client.send(req)(reqRes) onComplete {
255+
case Success(res) =>
256+
incomingLogger.info(s"$res")
257+
receivedMsgManager.enqueue(
258+
GenericIncomingMessage[OutgoingReqBound, IncomingResBound, OutgoingReqRes, IncomingReqBound, OutgoingResBound, IncomingReqRes](res)
259+
)
260+
case Failure(OcppException(ocppError)) =>
261+
incomingLogger.info(s"$ocppError")
262+
receivedMsgManager.enqueue(
263+
GenericIncomingMessage[OutgoingReqBound, IncomingResBound, OutgoingReqRes, IncomingReqBound, OutgoingResBound, IncomingReqRes](ocppError)
264+
)
265+
case Failure(e) =>
266+
connectionLogger.error(s"Failed to get response to outgoing OCPP request $req: ${e.getMessage}\n\t${e.getStackTrace.mkString("\n\t")}")
267+
throw ExecutionError(e)
268+
}
269+
}
270+
243271
/** Template method to be implemented by version-specific extending classes to establish a connection for that
244272
* version of OCPP */
245273
protected def createClient(

0 commit comments

Comments
 (0)