+ def calculateRealtimeUserState(
+ userAgreementHistoryModel: UserAgreementHistoryModel,
+ userStateMsg: UserStateMsg,
+ resourceMapping: JMap[String, ResourceTypeMsg],
+ realtimeMillis: Long
+ ) {
+
+ import scala.collection.JavaConverters.mapAsScalaMapConverter
+
+ val stateOfResources = userStateMsg.getStateOfResources.asScala
+
+ for( (resourceName, workingResourcesState) ← stateOfResources) {
+ resourceMapping.get(resourceName) match {
+ case null ⇒
+ // Ignore
+
+ case resourceTypeMsg ⇒
+ val chargingBehavior = aquarium.chargingBehaviorOf(resourceTypeMsg)
+ val stateOfResourceInstance = workingResourcesState.getStateOfResourceInstance.asScala
+
+ for((resourceInstanceID, resourceInstanceState) ← stateOfResourceInstance) {
+ Debug(logger, "Realtime calculation for %s, %s", resourceName, resourceInstanceID)
+ val virtualEvents = chargingBehavior.createVirtualEventsForRealtimeComputation(
+ userStateMsg.getUserID,
+ resourceName,
+ resourceInstanceID,
+ realtimeMillis,
+ resourceInstanceState
+ )
+ DebugSeq(logger, "virtualEvents", virtualEvents, 1)
+
+ processResourceEvents(
+ realtimeMillis,
+ virtualEvents,
+ userAgreementHistoryModel,
+ userStateMsg,
+ resourceMapping,
+ realtimeMillis
+ )
+ }
+ }
+ }