fix: improve lock handling in user session interactions #36
@@ -185,7 +185,7 @@ class GameLobby private(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private def getPlayerInteractable(userSession: UserSession, iType: InteractionType): AbstractPlayer = {
|
private def getPlayerInteractable(userSession: UserSession, iType: InteractionType): AbstractPlayer = {
|
||||||
if (!Thread.holdsLock(userSession.lock)) {
|
if (!userSession.lock.isHeldByCurrentThread) {
|
||||||
throw new IllegalStateException("The user session is not locked!")
|
throw new IllegalStateException("The user session is not locked!")
|
||||||
}
|
}
|
||||||
if (userSession.canInteract.isEmpty || userSession.canInteract.get != iType) {
|
if (userSession.canInteract.isEmpty || userSession.canInteract.get != iType) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.concurrent.locks.{Lock, ReentrantLock}
|
|||||||
|
|
||||||
class UserSession(user: User, val host: Boolean) extends PlayerSession {
|
class UserSession(user: User, val host: Boolean) extends PlayerSession {
|
||||||
var canInteract: Option[InteractionType] = None
|
var canInteract: Option[InteractionType] = None
|
||||||
val lock: Lock = ReentrantLock()
|
val lock: ReentrantLock = ReentrantLock()
|
||||||
|
|
||||||
override def updatePlayer(event: SimpleEvent): Unit = {
|
override def updatePlayer(event: SimpleEvent): Unit = {
|
||||||
event match {
|
event match {
|
||||||
|
|||||||
Reference in New Issue
Block a user