Handle chat-less lobby sync

This commit is contained in:
Thibault Duplessis 2012-03-29 10:39:37 +02:00
parent 80617816aa
commit bd5d611b95
3 changed files with 17 additions and 10 deletions

View file

@ -24,9 +24,12 @@ trait LilaController extends Controller with ContentTypes with RequestGetter {
_ Ok("ok")
)
def ValidIORedir(op: IO[Valid[Unit]], url: => String) =
def ValidIORedir(op: IO[Valid[Unit]], url: String) =
op.unsafePerformIO.fold(
failures BadRequest(failures.list mkString "\n"),
failures {
println(failures.list mkString "\n")
Redirect("/" + url)
},
_ Redirect("/" + url)
)

View file

@ -20,7 +20,7 @@ object LobbyXhrC extends LilaController {
hookId,
getIntOr("auth", 0) == 1,
getIntOr("state", 0),
getIntOr("messageId", 0),
getIntOr("messageId", -1),
getIntOr("entryId", 0)
))
}

View file

@ -57,8 +57,11 @@ final class LobbySyncer(
myHookId: Option[String],
messageId: Int,
entryId: Int): IO[Response] = for {
messages if (messageId == 0) messageRepo.recent
else messageRepo since max(messageMemo.id - messageRepo.max, messageId)
messages (messageId match {
case -1 io(Nil)
case 0 messageRepo.recent
case id messageRepo since max(messageMemo.id - messageRepo.max, id)
})
entries if (entryId == 0) entryRepo.recent
else entryRepo since max(entryMemo.id - entryRepo.max, entryId)
} yield Map(
@ -67,10 +70,11 @@ final class LobbySyncer(
if (hooks.nonEmpty) Map("hooks" -> renderHooks(hooks, myHookId).toMap)
else Map("message" -> "No game available right now, create one!")
},
"chat" -> messages.toNel.fold(
renderMessages,
Map("id" -> messageId, "messages" -> Nil)
),
"chat" -> (messageId match {
case -1 null
case id messages.toNel.fold(
renderMessages, Map("id" -> id, "messages" -> Nil))
}),
"timeline" -> entries.toNel.fold(
renderEntries,
Map("id" -> entryId, "entries" -> Nil)
@ -119,7 +123,7 @@ final class LobbySyncer(
def wait(loop: Int): Int = {
if (loop == 0 ||
lobbyMemo.version != version ||
messageMemo.id != messageId ||
(messageId != -1 && messageMemo.id != messageId) ||
entryMemo.id != entryId) lobbyMemo.version
else { Thread sleep sleep; wait(loop - 1) }
}