only one hook per player
This commit is contained in:
parent
7a1b9a3a36
commit
01960c4769
|
@ -41,7 +41,7 @@ object Setup extends LilaController with TheftPrevention {
|
|||
def hook(uid: String) = OpenBody { implicit ctx ⇒
|
||||
implicit val req = ctx.body
|
||||
env.forms.hook(ctx).bindFromRequest.value ?? { config ⇒
|
||||
env.processor.hook(config, uid)
|
||||
env.processor.hook(config, uid, lila.common.HTTPRequest sid req)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,4 +16,7 @@ object HTTPRequest {
|
|||
|
||||
def userAgent(req: RequestHeader): Option[String] =
|
||||
req.headers get HeaderNames.USER_AGENT
|
||||
|
||||
def sid(req: RequestHeader): Option[String] =
|
||||
req.session get "sid"
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import lila.user.User
|
|||
case class Hook(
|
||||
id: String,
|
||||
uid: String, // owner socket uid
|
||||
sid: Option[String], // owner cookie (used to prevent multiple hooks)
|
||||
variant: Int,
|
||||
hasClock: Boolean,
|
||||
time: Option[Int],
|
||||
|
@ -68,6 +69,7 @@ object Hook {
|
|||
mode: Mode,
|
||||
color: String,
|
||||
user: Option[User],
|
||||
sid: Option[String],
|
||||
eloRange: EloRange): Hook = new Hook(
|
||||
id = Random nextString idSize,
|
||||
uid = uid,
|
||||
|
@ -79,6 +81,7 @@ object Hook {
|
|||
color = color,
|
||||
userId = user map (_.id),
|
||||
username = user.fold(User.anonymous)(_.username),
|
||||
sid = sid,
|
||||
elo = user map (_.elo),
|
||||
eloRange = eloRange.toString,
|
||||
engine = user.??(_.engine),
|
||||
|
|
|
@ -13,6 +13,8 @@ object HookRepo {
|
|||
|
||||
def byUid(uid: String) = hooks find (_.uid == uid)
|
||||
|
||||
def bySid(sid: String) = hooks find (_.sid == sid.some)
|
||||
|
||||
def allOpen: List[Hook] = list.filter(_.open)
|
||||
|
||||
def allOpenCasual = list.filter(h ⇒ h.open && h.mode == 0)
|
||||
|
|
|
@ -23,6 +23,7 @@ private[lobby] final class Lobby(
|
|||
|
||||
case msg @ AddHook(hook) ⇒ {
|
||||
HookRepo byUid hook.uid foreach remove
|
||||
hook.sid ?? { sid ⇒ HookRepo bySid sid foreach remove }
|
||||
HookRepo save hook
|
||||
socket ! msg
|
||||
}
|
||||
|
|
|
@ -18,13 +18,14 @@ case class HookConfig(
|
|||
|
||||
def >> = (variant.id, clock, time, increment, mode.id.some, eloRange.toString.some, color.name).some
|
||||
|
||||
def hook(uid: String, user: Option[User]) = Hook.make(
|
||||
def hook(uid: String, user: Option[User], sid: Option[String]) = Hook.make(
|
||||
uid = uid,
|
||||
variant = variant,
|
||||
clock = makeClock,
|
||||
mode = mode,
|
||||
color = color.name,
|
||||
user = user,
|
||||
sid = sid,
|
||||
eloRange = eloRange)
|
||||
|
||||
def encode = RawHookConfig(
|
||||
|
|
|
@ -50,9 +50,11 @@ private[setup] final class Processor(
|
|||
friendConfigMemo.set(pov.game.id, config) inject pov
|
||||
}
|
||||
|
||||
def hook(config: HookConfig, uid: String)(implicit ctx: Context): Funit = {
|
||||
val hook = config.hook(uid, ctx.me)
|
||||
saveConfig(_ withHook config) >>- (lobby ! AddHook(hook))
|
||||
def hook(config: HookConfig, uid: String, sid: Option[String])(implicit ctx: Context): Funit = {
|
||||
val hook = config.hook(uid, ctx.me, sid)
|
||||
saveConfig(_ withHook config) >>- {
|
||||
lobby ! AddHook(hook)
|
||||
}
|
||||
}
|
||||
|
||||
def api(implicit ctx: Context): Fu[JsObject] = {
|
||||
|
|
3
todo
3
todo
|
@ -59,9 +59,8 @@ check team average elo http://en.lichess.org/inbox/benuegti#bottom
|
|||
if game ends during move -> bug
|
||||
challenge friends
|
||||
computer players ranks once a day
|
||||
lobby don't show duplicated entries
|
||||
prevent double lobby entry per browser
|
||||
players world map
|
||||
signin button in chrome (light)
|
||||
|
||||
---
|
||||
|
||||
|
|
Loading…
Reference in a new issue