From 9a71e3fac386b7f27f5e829ab818e39c3ff07a45 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Thu, 6 Jul 2023 22:03:20 +0200 Subject: [PATCH] scalafmt 3.7.7, rewrite --- .scalafmt.conf | 6 ++-- src/main/scala/Auth.scala | 2 +- src/main/scala/Chess.scala | 4 +-- src/main/scala/Controller.scala | 33 ++++++++++--------- src/main/scala/Fens.scala | 3 +- src/main/scala/FriendList.scala | 4 +-- src/main/scala/Lila.scala | 7 ++-- src/main/scala/LilaHandler.scala | 4 +-- src/main/scala/Monitor.scala | 6 ++-- src/main/scala/RoomCrowd.scala | 7 ++-- src/main/scala/RoundCrowd.scala | 16 ++++----- src/main/scala/SeenAtUpdate.scala | 4 +-- src/main/scala/SocialGraph.scala | 13 ++++---- src/main/scala/Tv.scala | 2 +- src/main/scala/Users.scala | 7 ++-- .../scala/actor/ChallengeClientActor.scala | 6 ++-- src/main/scala/actor/ClientActor.scala | 6 ++-- src/main/scala/actor/LobbyClientActor.scala | 11 +++---- src/main/scala/actor/RacerClientActor.scala | 4 +-- src/main/scala/actor/RoomActor.scala | 6 ++-- src/main/scala/actor/RoundClientActor.scala | 30 ++++++++--------- src/main/scala/actor/SimulClientActor.scala | 4 +-- src/main/scala/actor/SiteClientActor.scala | 2 +- src/main/scala/actor/StudyClientActor.scala | 4 +-- src/main/scala/actor/SwissClientActor.scala | 4 +-- src/main/scala/actor/TeamClientActor.scala | 4 +-- src/main/scala/actor/TourClientActor.scala | 4 +-- src/main/scala/evalCache/Eval.scala | 10 +++--- src/main/scala/evalCache/EvalCacheApi.scala | 2 +- .../evalCache/EvalCacheBsonHandlers.scala | 12 +++---- .../evalCache/EvalCacheJsonHandlers.scala | 4 +-- .../scala/evalCache/EvalCacheSelector.scala | 2 +- .../scala/evalCache/EvalCacheTruster.scala | 2 +- .../scala/evalCache/EvalCacheUpgrade.scala | 4 +-- src/main/scala/ipc/ClientOut.scala | 2 +- src/main/scala/ipc/CrowdJson.scala | 11 ++++--- src/main/scala/ipc/LilaIn.scala | 6 ++-- src/main/scala/ipc/LilaOut.scala | 12 +++---- src/main/scala/netty/NettyServer.scala | 24 +++++++------- src/main/scala/util/Chronometer.scala | 6 ++-- src/main/scala/util/DedupEmit.scala | 2 +- src/main/scala/util/EventBus.scala | 9 ++--- src/main/scala/util/ExpireCallbackMemo.scala | 6 ++-- src/main/scala/util/GroupedWithin.scala | 4 +-- src/main/scala/util/JsExtension.scala | 2 +- src/main/scala/util/RateLimit.scala | 6 ++-- src/main/scala/util/RateLimitMap.scala | 7 ++-- 47 files changed, 163 insertions(+), 173 deletions(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 7eccedcb..9445cc0d 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.7.6" +version = "3.7.7" runner.dialect = scala3 align.preset = more @@ -6,4 +6,6 @@ maxColumn = 110 spaces.inImportCurlyBraces = true rewrite.rules = [SortImports, RedundantParens, SortModifiers] rewrite.redundantBraces.stringInterpolation = true -docstrings.style = keep // don't format comment + +rewrite.scala3.convertToNewSyntax = yes +rewrite.scala3.removeOptionalBraces = yes diff --git a/src/main/scala/Auth.scala b/src/main/scala/Auth.scala index 54fefbbd..360d1d56 100644 --- a/src/main/scala/Auth.scala +++ b/src/main/scala/Auth.scala @@ -11,7 +11,7 @@ final class Auth(mongo: Mongo, seenAt: SeenAtUpdate, config: Config)(using Execu import Mongo.given def apply(req: RequestHeader): Future[Option[Success]] = - if (req.flag contains Flag.api) Future successful None + if req.flag contains Flag.api then Future successful None else sessionIdFromReq(req) match case Some(sid) if sid startsWith appealPrefix => Future successful None diff --git a/src/main/scala/Chess.scala b/src/main/scala/Chess.scala index 81f2f8c5..a4596b59 100644 --- a/src/main/scala/Chess.scala +++ b/src/main/scala/Chess.scala @@ -50,7 +50,7 @@ object Chess: then initialDests else val sit = chess.Game(req.variant.some, Some(req.fen)).situation - if (sit.playable(false)) json.destString(sit.destinations) else "" + if sit.playable(false) then json.destString(sit.destinations) else "" , opening = if Variant.list.openingSensibleVariants(req.variant) @@ -81,7 +81,7 @@ object Chess: move = move, fen = fen, check = game.situation.check, - dests = if (movable) game.situation.destinations else Map.empty, + dests = if movable then game.situation.destinations else Map.empty, opening = if game.ply <= 30 && Variant.list.openingSensibleVariants(game.board.variant) then OpeningDb findByEpdFen fen diff --git a/src/main/scala/Controller.scala b/src/main/scala/Controller.scala index bfecc4aa..7d07320a 100644 --- a/src/main/scala/Controller.scala +++ b/src/main/scala/Controller.scala @@ -199,22 +199,23 @@ final class Controller( def racer(id: Racer.Id, header: RequestHeader) = WebSocket(header): req => Future.successful: - req.user.match { - case Some(u) => Option(Racer.PlayerId.User(u)) - case None => auth.sidFromReq(header) map Racer.PlayerId.Anon.apply - }.match - case None => notFound - case Some(pid) => - endpoint( - name = "racer", - behavior = emit => - RacerClientActor.start(RoomActor.State(id into RoomId, IsTroll(false)), pid): - Deps(emit, req, services) - , - header, - credits = 30, - interval = 15.seconds - ) + req.user + .match + case Some(u) => Option(Racer.PlayerId.User(u)) + case None => auth.sidFromReq(header) map Racer.PlayerId.Anon.apply + .match + case None => notFound + case Some(pid) => + endpoint( + name = "racer", + behavior = emit => + RacerClientActor.start(RoomActor.State(id into RoomId, IsTroll(false)), pid): + Deps(emit, req, services) + , + header, + credits = 30, + interval = 15.seconds + ) def api(header: RequestHeader) = val req = Req(header, Sri.random, None).copy(flag = Some(Flag.api)) diff --git a/src/main/scala/Fens.scala b/src/main/scala/Fens.scala index 79d69057..2d3851e3 100644 --- a/src/main/scala/Fens.scala +++ b/src/main/scala/Fens.scala @@ -55,7 +55,7 @@ object Fens: (_, watched) => val turnColor = moveBy.fold(Color.white)(c => !c) json.value - .match { + .match case MoveClockRegex(uciS, fenS, wcS, bcS) => for uci <- Uci(uciS) @@ -64,7 +64,6 @@ object Fens: yield Position(uci, Fen.Board(fenS), Some(Clock(wc, bc)), turnColor) case MoveRegex(uciS, fenS) => Uci(uciS) map { Position(_, Fen.Board(fenS), None, turnColor) } case _ => None - } .fold(watched): position => val msg = ClientIn.Fen(gameId, position) watched.clients foreach { _ ! msg } diff --git a/src/main/scala/FriendList.scala b/src/main/scala/FriendList.scala index 673c6d03..41479dfe 100644 --- a/src/main/scala/FriendList.scala +++ b/src/main/scala/FriendList.scala @@ -54,12 +54,12 @@ final class FriendList( private def update(userId: User.Id, msg: User.Id => ipc.ClientIn)(update: UserMeta => UserMeta) = graph.tell(userId, update) foreach { (subject, subs) => - if (subs.nonEmpty) users.tellMany(subs, msg(subject.id)) + if subs.nonEmpty then users.tellMany(subs, msg(subject.id)) } private def updateView(userId: User.Id, msg: UserView => ipc.ClientIn)(update: UserMeta => UserMeta) = graph.tell(userId, update) foreach { (subject, subs) => - if (subs.nonEmpty) + if subs.nonEmpty then userDatas .get(subject.id) .foreach: diff --git a/src/main/scala/Lila.scala b/src/main/scala/Lila.scala index 01f65ed9..370c2018 100644 --- a/src/main/scala/Lila.scala +++ b/src/main/scala/Lila.scala @@ -14,7 +14,7 @@ final class Lila(config: Config)(using Executor): object currentStatus: private var value: Status = Status.Online - def setOffline() = { value = Status.Offline } + def setOffline() = value = Status.Offline def setOnline() = value = Status.Online buffer.flush() @@ -30,7 +30,7 @@ final class Lila(config: Config)(using Executor): @annotation.tailrec def flush(): Unit = val next = queue.poll() - if (next != null) + if next != null then connIn.async.publish(next.chan, next.msg) flush() @@ -70,7 +70,7 @@ final class Lila(config: Config)(using Executor): val connIn = redis.connectPubSub - val emit: Emit[In] = in => { + val emit: Emit[In] = in => val msg = in.write val path = msg.takeWhile(' '.!=) val chanIn = chan in msg @@ -83,7 +83,6 @@ final class Lila(config: Config)(using Executor): else if in.isInstanceOf[LilaIn.RoomSetVersions] then connIn.async.publish(chanIn, msg) else Monitor.redis.drop(chanIn, path) - } chan .match diff --git a/src/main/scala/LilaHandler.scala b/src/main/scala/LilaHandler.scala index e3dabf8b..23f4bfdd 100644 --- a/src/main/scala/LilaHandler.scala +++ b/src/main/scala/LilaHandler.scala @@ -100,7 +100,7 @@ final class LilaHandler( if allAbsent.sizeIs > 100 then ThreadLocalRandom.shuffle(allAbsent) take 80 else allAbsent - if (absent.nonEmpty) users.tellMany(absent, ClientIn.TourReminder(roomId into Tour.Id, name)) + if absent.nonEmpty then users.tellMany(absent, ClientIn.TourReminder(roomId into Tour.Id, name)) } case LilaBoot => roomBoot(_.idFilter.tour, lila.emit.tour) case msg => roomHandler(msg) @@ -120,7 +120,7 @@ final class LilaHandler( val versioned = ClientIn.RoundVersioned(version, flags, tpe, data) History.round.add(gameId, versioned) publish(_ room gameId, versioned) - if (tpe == "move" || tpe == "drop") Fens.move(gameId, data, flags.moveBy) + if tpe == "move" || tpe == "drop" then Fens.move(gameId, data, flags.moveBy) case TellRoom(roomId, payload) => publish(_ room roomId, ClientIn.Payload(payload)) case RoundResyncPlayer(fullId) => publish(_ room fullId.gameId, ClientIn.RoundResyncPlayer(fullId.playerId)) diff --git a/src/main/scala/Monitor.scala b/src/main/scala/Monitor.scala index 272d4ebb..194509fa 100644 --- a/src/main/scala/Monitor.scala +++ b/src/main/scala/Monitor.scala @@ -26,7 +26,7 @@ final class Monitor( logger.info(s"lila-ws 3.0 netty native=$native kamon=$useKamon") logger.info(s"Java version: $version, memory: ${memory}MB") - if (useKamon) kamon.Kamon.init() + if useKamon then kamon.Kamon.init() scheduler.scheduleWithFixedDelay(5.seconds, 1949.millis) { () => periodicMetrics() } @@ -134,7 +134,7 @@ object Monitor: private val frameLagHistogram = Kamon.timer("round.lag.frame").withoutTags() def roundFrameLag(millis: Int) = - if (millis > 1 && millis < 99999) frameLagHistogram.record(millis.toLong, TimeUnit.MILLISECONDS) + if millis > 1 && millis < 99999 then frameLagHistogram.record(millis.toLong, TimeUnit.MILLISECONDS) def time[A](metric: Monitor.type => kamon.metric.Timer)(f: => A): A = val timer = metric(Monitor).start() @@ -145,7 +145,7 @@ object Monitor: object evalCache: private val r = Kamon.counter("evalCache.request") def request(ply: Int, isHit: Boolean) = - r.withTags(TagSet.from(Map("ply" -> (if (ply < 15) ply.toString else "15+"), "hit" -> isHit))) + r.withTags(TagSet.from(Map("ply" -> (if ply < 15 then ply.toString else "15+"), "hit" -> isHit))) object upgrade: val count = Kamon.counter("evalCache.upgrade.count").withoutTags() val members = Kamon.gauge("evalCache.upgrade.members").withoutTags() diff --git a/src/main/scala/RoomCrowd.scala b/src/main/scala/RoomCrowd.scala index aa7764b4..e1bdc26e 100644 --- a/src/main/scala/RoomCrowd.scala +++ b/src/main/scala/RoomCrowd.scala @@ -19,12 +19,11 @@ final class RoomCrowd(json: CrowdJson, groupedWithin: util.GroupedWithin)(using def disconnect(roomId: RoomId, user: Option[User.Id]): Unit = val room = rooms.computeIfPresent( roomId, - (_, room) => { + (_, room) => val newRoom = room disconnect user - if (newRoom.isEmpty) null else newRoom - } + if newRoom.isEmpty then null else newRoom ) - if (room != null) publish(roomId, room) + if room != null then publish(roomId, room) def getUsers(roomId: RoomId): Set[User.Id] = Option(rooms get roomId).fold(Set.empty[User.Id])(_.users.keySet) diff --git a/src/main/scala/RoundCrowd.scala b/src/main/scala/RoundCrowd.scala index d7c666d8..3aa83f4c 100644 --- a/src/main/scala/RoundCrowd.scala +++ b/src/main/scala/RoundCrowd.scala @@ -24,23 +24,21 @@ final class RoundCrowd( def disconnect(roomId: RoomId, user: Option[User.Id], player: Option[Color]): Unit = rounds.computeIfPresent( roomId, - (_, round) => { + (_, round) => val newRound = round.disconnect(user, player) publish(roomId, newRound) - if (newRound.isEmpty) null else newRound - } + if newRound.isEmpty then null else newRound ) def botOnline(roomId: RoomId, color: Color, online: Boolean): Unit = rounds.compute( roomId, (_, cur) => - Option(cur).getOrElse(RoundState()).botOnline(color, online) match { + Option(cur).getOrElse(RoundState()).botOnline(color, online) match case None => cur case Some(round) => publish(roomId, round) - if (round.isEmpty) null else round - } + if round.isEmpty then null else round ) def getUsers(roomId: RoomId): Set[User.Id] = @@ -80,16 +78,16 @@ object RoundCrowd: ): def connect(user: Option[User.Id], player: Option[Color]) = copy( - room = if (player.isDefined) room else room connect user, + room = if player.isDefined then room else room connect user, players = player.fold(players)(c => players.update(c, _ + 1)) ) def disconnect(user: Option[User.Id], player: Option[Color]) = copy( - room = if (player.isDefined) room else room disconnect user, + room = if player.isDefined then room else room disconnect user, players = player.fold(players)(c => players.update(c, nb => Math.max(0, nb - 1))) ) def botOnline(color: Color, online: Boolean): Option[RoundState] = Some: - if (online) connect(None, Some(color)) + if online then connect(None, Some(color)) else disconnect(None, Some(color)) def isEmpty = room.isEmpty && players.forall(1 > _) diff --git a/src/main/scala/SeenAtUpdate.scala b/src/main/scala/SeenAtUpdate.scala index c02d37fd..94acad28 100644 --- a/src/main/scala/SeenAtUpdate.scala +++ b/src/main/scala/SeenAtUpdate.scala @@ -30,7 +30,7 @@ final class SeenAtUpdate(mongo: Mongo)(using ) isCoach = userDoc.exists(_.getAsOpt[List[String]]("roles").exists(_ contains "ROLE_COACH")) _ <- - if (isCoach) + if isCoach then mongo.coach( _.update(ordered = false).one( BSONDocument("_id" -> user), @@ -39,7 +39,7 @@ final class SeenAtUpdate(mongo: Mongo)(using ) else Future successful {} _ <- - if (userDoc.isDefined && streamers.contains(user)) + if userDoc.isDefined && streamers.contains(user) then mongo.streamer( _.update(ordered = false).one( BSONDocument("_id" -> user), diff --git a/src/main/scala/SocialGraph.scala b/src/main/scala/SocialGraph.scala index 6ddfb9bc..d2f03261 100644 --- a/src/main/scala/SocialGraph.scala +++ b/src/main/scala/SocialGraph.scala @@ -58,7 +58,7 @@ final class SocialGraph(mongo: Mongo, config: Config): // Try to find an existing or empty slot between hash and // hash + MaxStride. val hash = fxhash32(id) & slotsMask - for (s <- hash to (hash + SocialGraph.MaxStride)) + for s <- hash to (hash + SocialGraph.MaxStride) do val slot = s & slotsMask read(slot) match case None => throwReturn[Slot](NewSlot(slot)) @@ -72,7 +72,7 @@ final class SocialGraph(mongo: Mongo, config: Config): // is lost. // Do not replace exceptSlot. This can be used so that a followed user // does not replace its follower. - for (s <- hash to (hash + SocialGraph.MaxStride)) + for s <- hash to (hash + SocialGraph.MaxStride) do val slot = s & slotsMask read(slot) match case None => throwReturn[Slot](NewSlot(slot)) @@ -83,7 +83,7 @@ final class SocialGraph(mongo: Mongo, config: Config): case _ => // The hashtable is full. Overwrite a random entry. - val slot = if (hash != exceptSlot) hash else (hash + 1) & slotsMask + val slot = if hash != exceptSlot then hash else (hash + 1) & slotsMask freeSlot(slot) private def freeSlot(leftSlot: Int): NewSlot = @@ -118,14 +118,13 @@ final class SocialGraph(mongo: Mongo, config: Config): graph.readOutgoing(leftSlot) foreach { graph.remove(leftSlot, _) } (followed map { userId => - val (rightSlot, info) = findSlot(userId, leftSlot) match { + val (rightSlot, info) = findSlot(userId, leftSlot) match case NewSlot(rightSlot) => write(rightSlot, UserEntry(userId, UserMeta.stale)) rightSlot -> UserEntry(userId, UserMeta.stale) case ExistingSlot(rightSlot, entry) => write(rightSlot, entry) rightSlot -> UserEntry(userId, entry.meta) - } graph.add(leftSlot, rightSlot) info }).toList @@ -155,7 +154,7 @@ final class SocialGraph(mongo: Mongo, config: Config): case NewSlot(_) => None case ExistingSlot(slot, entry) => - if (entry.meta.fresh) + if entry.meta.fresh then write(slot, entry.update(_.withSubscribed(true))) Some(readFollowed(slot)) else None @@ -241,7 +240,7 @@ object SocialGraph: val freshSubscribed = UserMeta(FRESH | SUBSCRIBED) extension (flags: UserMeta) - private inline def toggle(flag: Int, on: Boolean) = UserMeta(if (on) flags | flag else flags & ~flag) + private inline def toggle(flag: Int, on: Boolean) = UserMeta(if on then flags | flag else flags & ~flag) private inline def has(flag: Int): Boolean = (flags & flag) != 0 inline def fresh = flags.has(UserMeta.FRESH) diff --git a/src/main/scala/Tv.scala b/src/main/scala/Tv.scala index fcdf83ff..8f19cb63 100644 --- a/src/main/scala/Tv.scala +++ b/src/main/scala/Tv.scala @@ -21,7 +21,7 @@ object Tv: Bus.publish(_ room RoomId(gameId), cliMsg) } } - (if (out.speed <= chess.Speed.Bullet) fast else slow).put(out.gameId.value, true) + (if out.speed <= chess.Speed.Bullet then fast else slow).put(out.gameId.value, true) def get(gameId: Game.Id): Boolean = get(gameId, fast) || get(gameId, slow) diff --git a/src/main/scala/Users.scala b/src/main/scala/Users.scala index 3ed9de55..d65c109d 100644 --- a/src/main/scala/Users.scala +++ b/src/main/scala/Users.scala @@ -32,13 +32,12 @@ final class Users(using scheduler: Scheduler, ec: Executor): def disconnect(user: User.Id, client: Client): Unit = users.computeIfPresent( user, - (_, clients) => { + (_, clients) => val newClients = clients - client - if (newClients.isEmpty) { + if newClients.isEmpty then disconnects add user null - } else newClients - } + else newClients ) def tellOne(userId: User.Id, payload: ClientMsg): Unit = diff --git a/src/main/scala/actor/ChallengeClientActor.scala b/src/main/scala/actor/ChallengeClientActor.scala index 96d67175..b3cbe8a5 100644 --- a/src/main/scala/actor/ChallengeClientActor.scala +++ b/src/main/scala/actor/ChallengeClientActor.scala @@ -41,7 +41,7 @@ object ChallengeClientActor: Behaviors.same case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive challenge state.room.room Behaviors.same @@ -49,13 +49,13 @@ object ChallengeClientActor: case ctrl: ClientCtrl => socketControl(state.site, deps, ctrl) case ClientOut.ChallengePing => - if (state.owner) services.challengePing(state.room.room) + if state.owner then services.challengePing(state.room.room) Behaviors.same // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/ClientActor.scala b/src/main/scala/actor/ClientActor.scala index 4533e8a5..03bc63b2 100644 --- a/src/main/scala/actor/ClientActor.scala +++ b/src/main/scala/actor/ClientActor.scala @@ -20,7 +20,7 @@ object ClientActor: def onStop(state: State, deps: Deps, ctx: ActorContext[ClientMsg]): Unit = import deps.* LilaWsServer.connections.decrementAndGet - if (state.watchedGames.nonEmpty) Fens.unwatch(state.watchedGames, ctx.self) + if state.watchedGames.nonEmpty then Fens.unwatch(state.watchedGames, ctx.self) (Bus.channel.mlat :: busChansOf(req)) foreach { Bus.unsubscribe(_, ctx.self) } req.user foreach { user => users.disconnect(user, ctx.self) @@ -31,7 +31,7 @@ object ClientActor: msg match case ClientCtrl.Broom(oldSeconds) => - if (state.lastPing < oldSeconds && !deps.req.flag.contains(Flag.api)) Behaviors.stopped + if state.lastPing < oldSeconds && !deps.req.flag.contains(Flag.api) then Behaviors.stopped else Behaviors.same case ClientCtrl.Disconnect => @@ -141,7 +141,7 @@ object ClientActor: msg match case msg: ClientIn.TourReminder => - if (state.tourReminded) None + if state.tourReminded then None else deps clientIn msg Some(state.copy(tourReminded = true)) diff --git a/src/main/scala/actor/LobbyClientActor.scala b/src/main/scala/actor/LobbyClientActor.scala index 216d56ec..c653f6f2 100644 --- a/src/main/scala/actor/LobbyClientActor.scala +++ b/src/main/scala/actor/LobbyClientActor.scala @@ -38,11 +38,11 @@ object LobbyClientActor: case ctrl: ClientCtrl => socketControl(state.site, deps, ctrl) case ClientIn.LobbyNonIdle(payload) => - if (!state.idle) clientIn(payload) + if !state.idle then clientIn(payload) Behaviors.same case ClientIn.OnlyFor(endpoint, payload) => - if (endpoint == ClientIn.OnlyFor.Endpoint.Lobby) clientIn(payload) + if endpoint == ClientIn.OnlyFor.Endpoint.Lobby then clientIn(payload) Behaviors.same case in: ClientIn => @@ -55,10 +55,9 @@ object LobbyClientActor: apply(state.copy(site = sitePing(state.site, deps, msg)), deps) case ClientOut.LobbyJoin(payload) => - if ( - deps.req.user.isDefined || + if deps.req.user.isDefined || deps.req.ip.exists(ip => deps.services.lobby.anonJoinByIpRateLimit(ip.value)) - ) forward(payload) + then forward(payload) Behaviors.same case ClientOut.LobbyForward(payload) => @@ -72,7 +71,7 @@ object LobbyClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/RacerClientActor.scala b/src/main/scala/actor/RacerClientActor.scala index f2c21887..24266a5e 100644 --- a/src/main/scala/actor/RacerClientActor.scala +++ b/src/main/scala/actor/RacerClientActor.scala @@ -38,7 +38,7 @@ object RacerClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive.racer(state.room.room) Behaviors.same @@ -60,7 +60,7 @@ object RacerClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/RoomActor.scala b/src/main/scala/actor/RoomActor.scala index 7fae4ad1..efaa32de 100644 --- a/src/main/scala/actor/RoomActor.scala +++ b/src/main/scala/actor/RoomActor.scala @@ -34,7 +34,7 @@ object RoomActor: deps.roomCrowd.disconnect(state.room, deps.req.user) def versionFor(isTroll: IsTroll, msg: ClientIn.Versioned): ClientIn.Payload = - if (!msg.troll.value || isTroll.value) msg.full + if !msg.troll.value || isTroll.value then msg.full else msg.skip def receive( @@ -47,11 +47,11 @@ object RoomActor: None -> None case ClientIn.OnlyFor(endpoint, payload) => - if (endpoint == ClientIn.OnlyFor.Endpoint.Room(state.room)) deps.clientIn(payload) + if endpoint == ClientIn.OnlyFor.Endpoint.Room(state.room) then deps.clientIn(payload) None -> None case crowd: ClientIn.Crowd => - if (crowd == state.lastCrowd) None -> None + if crowd == state.lastCrowd then None -> None else Some { deps.clientIn(crowd) diff --git a/src/main/scala/actor/RoundClientActor.scala b/src/main/scala/actor/RoundClientActor.scala index 408ee2eb..6b600e1d 100644 --- a/src/main/scala/actor/RoundClientActor.scala +++ b/src/main/scala/actor/RoundClientActor.scala @@ -53,13 +53,12 @@ object RoundClientActor: } def versionFor(state: State, msg: ClientIn.RoundVersioned): ClientIn.Payload = - if ( - (msg.flags.troll && !state.room.isTroll.value) || + if (msg.flags.troll && !state.room.isTroll.value) || (msg.flags.owner && state.player.isEmpty) || (msg.flags.watcher && state.player.isDefined) || msg.flags.player.exists(c => state.player.fold(true)(_.color != c)) - ) msg.skip - else if (msg.flags.moveBy.exists(c => state.player.fold(true)(_.color == c))) msg.noDests + then msg.skip + else if msg.flags.moveBy.exists(c => state.player.fold(true)(_.color == c)) then msg.noDests else msg.full private def apply(state: State, deps: Deps): Behavior[ClientMsg] = @@ -78,7 +77,7 @@ object RoundClientActor: Behaviors.same case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else Behaviors.same case ctrl: ClientCtrl => socketControl(state.site, deps, ctrl) @@ -88,11 +87,11 @@ object RoundClientActor: Behaviors.same case ClientIn.OnlyFor(endpoint, payload) => - if (endpoint == ClientIn.OnlyFor.Endpoint.Room(state.room.room)) clientIn(payload) + if endpoint == ClientIn.OnlyFor.Endpoint.Room(state.room.room) then clientIn(payload) Behaviors.same case crowd: ClientIn.Crowd => - if (crowd == state.room.lastCrowd) Behaviors.same + if crowd == state.room.lastCrowd then Behaviors.same else deps.clientIn(crowd) apply(state.copy(room = state.room.copy(lastCrowd = crowd)), deps) @@ -101,15 +100,15 @@ object RoundClientActor: apply(state.copy(room = state.room.copy(isTroll = v)), deps) case resync: ClientIn.RoundResyncPlayer => - if (state.player.exists(_.id == resync.playerId)) clientIn(resync) + if state.player.exists(_.id == resync.playerId) then clientIn(resync) Behaviors.same case gone: ClientIn.RoundGone => - if (state.player.exists(_.id != gone.playerId)) clientIn(gone) + if state.player.exists(_.id != gone.playerId) then clientIn(gone) Behaviors.same case goneIn: ClientIn.RoundGoneIn => - if (state.player.exists(_.id != goneIn.playerId)) clientIn(goneIn) + if state.player.exists(_.id != goneIn.playerId) then clientIn(goneIn) Behaviors.same case in: ClientIn => @@ -170,10 +169,11 @@ object RoundClientActor: Behaviors.same case ClientOut.RoundBerserk(ackId) => - if (state.player.isDefined) req.user foreach { u => - clientIn(ClientIn.Ack(ackId)) - lilaIn.round(LilaIn.RoundBerserk(gameId, u)) - } + if state.player.isDefined then + req.user foreach { u => + clientIn(ClientIn.Ack(ackId)) + lilaIn.round(LilaIn.RoundBerserk(gameId, u)) + } Behaviors.same case ClientOut.RoundHold(mean, sd) => @@ -195,7 +195,7 @@ object RoundClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/SimulClientActor.scala b/src/main/scala/actor/SimulClientActor.scala index b7e971d3..29f712c7 100644 --- a/src/main/scala/actor/SimulClientActor.scala +++ b/src/main/scala/actor/SimulClientActor.scala @@ -35,7 +35,7 @@ object SimulClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive.simul(state.room.room) Behaviors.same @@ -45,7 +45,7 @@ object SimulClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/SiteClientActor.scala b/src/main/scala/actor/SiteClientActor.scala index f052ac18..464f71b1 100644 --- a/src/main/scala/actor/SiteClientActor.scala +++ b/src/main/scala/actor/SiteClientActor.scala @@ -31,7 +31,7 @@ object SiteClientActor: case msg: ClientOutSite => val newState = globalReceive(state, deps, ctx, msg) - if (newState == state) Behaviors.same + if newState == state then Behaviors.same else apply(newState, deps) case _ => diff --git a/src/main/scala/actor/StudyClientActor.scala b/src/main/scala/actor/StudyClientActor.scala index c8bf9e16..d5f6223a 100644 --- a/src/main/scala/actor/StudyClientActor.scala +++ b/src/main/scala/actor/StudyClientActor.scala @@ -39,7 +39,7 @@ object StudyClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive study state.room.room Behaviors.same @@ -67,7 +67,7 @@ object StudyClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/SwissClientActor.scala b/src/main/scala/actor/SwissClientActor.scala index 35e39133..7311c6e8 100644 --- a/src/main/scala/actor/SwissClientActor.scala +++ b/src/main/scala/actor/SwissClientActor.scala @@ -35,7 +35,7 @@ object SwissClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive.swiss(state.room.room) Behaviors.same @@ -45,7 +45,7 @@ object SwissClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/TeamClientActor.scala b/src/main/scala/actor/TeamClientActor.scala index 9474f06e..6506679b 100644 --- a/src/main/scala/actor/TeamClientActor.scala +++ b/src/main/scala/actor/TeamClientActor.scala @@ -35,7 +35,7 @@ object TeamClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive.team(state.room.room) Behaviors.same @@ -45,7 +45,7 @@ object TeamClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/actor/TourClientActor.scala b/src/main/scala/actor/TourClientActor.scala index ad0ec5ea..6e7980f2 100644 --- a/src/main/scala/actor/TourClientActor.scala +++ b/src/main/scala/actor/TourClientActor.scala @@ -35,7 +35,7 @@ object TourClientActor: case Some(s) => apply(state.copy(site = s), deps) case ClientCtrl.Broom(oldSeconds) => - if (state.site.lastPing < oldSeconds) Behaviors.stopped + if state.site.lastPing < oldSeconds then Behaviors.stopped else keepAlive.tour(state.room.room) Behaviors.same @@ -45,7 +45,7 @@ object TourClientActor: // default receive (site) case msg: ClientOutSite => val siteState = globalReceive(state.site, deps, ctx, msg) - if (siteState == state.site) Behaviors.same + if siteState == state.site then Behaviors.same else apply(state.copy(site = siteState), deps) case _ => diff --git a/src/main/scala/evalCache/Eval.scala b/src/main/scala/evalCache/Eval.scala index 7c76b64b..fbf2c420 100644 --- a/src/main/scala/evalCache/Eval.scala +++ b/src/main/scala/evalCache/Eval.scala @@ -37,12 +37,12 @@ object Eval: inline def showPawns: String = "%.2f" format pawns inline def ceiled: Cp = - if (cp.value > Cp.CEILING) Cp.CEILING - else if (cp.value < -Cp.CEILING) -Cp.CEILING + if cp.value > Cp.CEILING then Cp.CEILING + else if cp.value < -Cp.CEILING then -Cp.CEILING else cp inline def invert: Cp = Cp(-cp.value) - inline def invertIf(cond: Boolean): Cp = if (cond) invert else cp + inline def invertIf(cond: Boolean): Cp = if cond then invert else cp def signum: Int = Math.signum(cp.value.toFloat).toInt end Cp @@ -53,9 +53,9 @@ object Eval: inline def moves: Int = mate.value inline def invert: Mate = Mate(-moves) - inline def invertIf(cond: Boolean): Mate = if (cond) invert else mate + inline def invertIf(cond: Boolean): Mate = if cond then invert else mate - inline def signum: Int = if (positive) 1 else -1 + inline def signum: Int = if positive then 1 else -1 inline def positive = mate.value > 0 inline def negative = mate.value < 0 diff --git a/src/main/scala/evalCache/EvalCacheApi.scala b/src/main/scala/evalCache/EvalCacheApi.scala index 10510d65..81a5c98a 100644 --- a/src/main/scala/evalCache/EvalCacheApi.scala +++ b/src/main/scala/evalCache/EvalCacheApi.scala @@ -72,7 +72,7 @@ final class EvalCacheApi(mongo: Mongo)(using private def fetchAndSetAccess(id: Id): Future[Option[EvalCacheEntry]] = mongo.evalCacheEntry(id) map { res => - if (res.isDefined) mongo.evalCacheUsedNow(id) + if res.isDefined then mongo.evalCacheUsedNow(id) res } diff --git a/src/main/scala/evalCache/EvalCacheBsonHandlers.scala b/src/main/scala/evalCache/EvalCacheBsonHandlers.scala index 1e915601..bd180827 100644 --- a/src/main/scala/evalCache/EvalCacheBsonHandlers.scala +++ b/src/main/scala/evalCache/EvalCacheBsonHandlers.scala @@ -17,9 +17,10 @@ object EvalCacheBsonHandlers: given BSONHandler[NonEmptyList[Pv]] = new: private def scoreWrite(s: Score): String = s.value.fold(_.value.toString, m => s"#${m.value}") private def scoreRead(str: String): Option[Score] = - if (str startsWith "#") str.drop(1).toIntOption map { m => - Score mate Mate(m) - } + if str startsWith "#" then + str.drop(1).toIntOption map { m => + Score mate Mate(m) + } else str.toIntOption map { c => Score cp Cp(c) @@ -66,7 +67,7 @@ object EvalCacheBsonHandlers: given BSONHandler[Id] = tryHandler[Id]( { case BSONString(value) => - value split ':' match { + value split ':' match case Array(fen) => Success(Id(chess.variant.Standard, SmallFen(fen))) case Array(variantId, fen) => import chess.variant.Variant @@ -79,11 +80,10 @@ object EvalCacheBsonHandlers: ) ) case _ => handlerBadValue(s"Invalid evalcache id $value") - } }, x => BSONString { - if (x.variant.standard || x.variant.fromPosition) x.smallFen.value + if x.variant.standard || x.variant.fromPosition then x.smallFen.value else s"${x.variant.id}:${x.smallFen.value}" } ) diff --git a/src/main/scala/evalCache/EvalCacheJsonHandlers.scala b/src/main/scala/evalCache/EvalCacheJsonHandlers.scala index e44de55e..a7a6cfaa 100644 --- a/src/main/scala/evalCache/EvalCacheJsonHandlers.scala +++ b/src/main/scala/evalCache/EvalCacheJsonHandlers.scala @@ -42,7 +42,7 @@ object EvalCacheJsonHandlers: .add("mate" -> pv.score.mate) private def parsePv(d: JsObject): Option[Pv] = - for { + for movesStr <- d str "moves" moves <- Moves from movesStr @@ -54,4 +54,4 @@ object EvalCacheJsonHandlers: .flatMap(_.reverse.toNel) score <- d.get[Cp]("cp").map(Score.cp(_)) orElse d.get[Mate]("mate").map(Score.mate(_)) - } yield Pv(score, moves) + yield Pv(score, moves) diff --git a/src/main/scala/evalCache/EvalCacheSelector.scala b/src/main/scala/evalCache/EvalCacheSelector.scala index 4af10bbe..514d4d4b 100644 --- a/src/main/scala/evalCache/EvalCacheSelector.scala +++ b/src/main/scala/evalCache/EvalCacheSelector.scala @@ -32,7 +32,7 @@ private object EvalCacheSelector: private def ranking(e: Eval): (Double, Double, Double) = // if well trusted, only rank on depth and tie on nodes - if (greatTrust(e.trust)) (99999, e.depth.value, e.knodes.value) + if greatTrust(e.trust) then (99999, e.depth.value, e.knodes.value) // else, rank on trust, and tie on depth then nodes else (e.trust.value, e.depth.value, e.knodes.value) diff --git a/src/main/scala/evalCache/EvalCacheTruster.scala b/src/main/scala/evalCache/EvalCacheTruster.scala index 2cc06e8d..3a264e13 100644 --- a/src/main/scala/evalCache/EvalCacheTruster.scala +++ b/src/main/scala/evalCache/EvalCacheTruster.scala @@ -23,7 +23,7 @@ final private class EvalCacheTruster(mongo: Mongo)(using Executor) extends Mongo } private def computeTrust(user: BSONDocument): Trust = - if (user.getAsOpt[List[String]]("marks").exists(_.nonEmpty)) Trust(-9999) + if user.getAsOpt[List[String]]("marks").exists(_.nonEmpty) then Trust(-9999) else Trust: seniorityBonus(user) + diff --git a/src/main/scala/evalCache/EvalCacheUpgrade.scala b/src/main/scala/evalCache/EvalCacheUpgrade.scala index dc3e467c..0b991d0d 100644 --- a/src/main/scala/evalCache/EvalCacheUpgrade.scala +++ b/src/main/scala/evalCache/EvalCacheUpgrade.scala @@ -45,7 +45,7 @@ final private class EvalCacheUpgrade(using } foreach { (setupId, eval) => evals += (setupId -> eval.copy(depth = input.eval.depth)) val wms = eval.sris.withFilter(_ != fromSri) flatMap { sri => members.get(sri.value) } - if (wms.nonEmpty) + if wms.nonEmpty then val evalJson = EvalCacheJsonHandlers.writeEval(input.eval, input.fen) wms.groupBy(_.path).map { (path, wms) => val hit = EvalHit(evalJson + ("path" -> JsString(path.value))) @@ -63,7 +63,7 @@ final private class EvalCacheUpgrade(using private def unregisterEval(setupId: SetupId, sri: Sri): Unit = evals get setupId foreach { eval => val newSris = eval.sris - sri - if (newSris.isEmpty) evals -= setupId + if newSris.isEmpty then evals -= setupId else evals += (setupId -> eval.copy(sris = newSris)) } diff --git a/src/main/scala/ipc/ClientOut.scala b/src/main/scala/ipc/ClientOut.scala index 83779af7..a2b3dc3e 100644 --- a/src/main/scala/ipc/ClientOut.scala +++ b/src/main/scala/ipc/ClientOut.scala @@ -136,7 +136,7 @@ object ClientOut: // impl def parse(str: String): Try[ClientOut] = - if (str == "p" || str == "null" || str == """{"t":"p"}""") emptyPing + if str == "p" || str == "null" || str == """{"t":"p"}""" then emptyPing else Try(Json parse str) map: case o: JsObject => diff --git a/src/main/scala/ipc/CrowdJson.scala b/src/main/scala/ipc/CrowdJson.scala index 288804a3..4ebd053d 100644 --- a/src/main/scala/ipc/CrowdJson.scala +++ b/src/main/scala/ipc/CrowdJson.scala @@ -7,16 +7,17 @@ import play.api.libs.json.* final class CrowdJson(inquirers: Inquirers, mongo: Mongo, lightUserApi: LightUserApi)(using Executor): def room(crowd: RoomCrowd.Output): Future[ClientIn.Crowd] = { - if (crowd.users.sizeIs > 20) keepOnlyStudyMembers(crowd) map { users => - crowd.copy(users = users, anons = 0) - } + if crowd.users.sizeIs > 20 then + keepOnlyStudyMembers(crowd) map { users => + crowd.copy(users = users, anons = 0) + } else Future successful crowd } flatMap spectatorsOf map ClientIn.Crowd.apply def round(crowd: RoundCrowd.Output): Future[ClientIn.Crowd] = spectatorsOf( crowd.room.copy( - users = if (crowd.room.users.sizeIs > 20) Nil else crowd.room.users + users = if crowd.room.users.sizeIs > 20 then Nil else crowd.room.users ) ) map { spectators => ClientIn.Crowd( @@ -30,7 +31,7 @@ final class CrowdJson(inquirers: Inquirers, mongo: Mongo, lightUserApi: LightUse } private def spectatorsOf(crowd: RoomCrowd.Output): Future[JsObject] = - if (crowd.users.isEmpty) Future successful Json.obj("nb" -> crowd.members) + if crowd.users.isEmpty then Future successful Json.obj("nb" -> crowd.members) else Future.traverse(crowd.users.filterNot(inquirers.contains))(lightUserApi.get) map { names => Json.obj( diff --git a/src/main/scala/ipc/LilaIn.scala b/src/main/scala/ipc/LilaIn.scala index b966c852..6d7ba127 100644 --- a/src/main/scala/ipc/LilaIn.scala +++ b/src/main/scala/ipc/LilaIn.scala @@ -129,7 +129,7 @@ object LilaIn: case class RoundOnlines(many: Iterable[RoundCrowd.Output]) extends Round: private def one(r: RoundCrowd.Output): String = - if (r.isEmpty) r.room.roomId.value + if r.isEmpty then r.room.roomId.value else s"${r.room.roomId}${boolean(r.players.white > 0)}${boolean(r.players.black > 0)}" def write = s"r/ons ${commas(many map one)}" @@ -154,7 +154,7 @@ object LilaIn: case class ReqResponse(reqId: Int, value: String) extends Study with Simul with Site: def write = s"req/response $reqId $value" - private def commas(as: Iterable[Any]): String = if (as.isEmpty) "-" else as mkString "," - private def boolean(b: Boolean): String = if (b) "+" else "-" + private def commas(as: Iterable[Any]): String = if as.isEmpty then "-" else as mkString "," + private def boolean(b: Boolean): String = if b then "+" else "-" private def optional(s: Option[String]): String = s getOrElse "-" private def writeColor(c: Color): String = c.fold("w", "b") diff --git a/src/main/scala/ipc/LilaOut.scala b/src/main/scala/ipc/LilaOut.scala index 5f297d5c..227c5b57 100644 --- a/src/main/scala/ipc/LilaOut.scala +++ b/src/main/scala/ipc/LilaOut.scala @@ -125,12 +125,12 @@ object LilaOut: watcher = f contains 's', owner = f contains 'p', player = - if (f contains 'w') Some(chess.White) - else if (f contains 'b') Some(chess.Black) + if f contains 'w' then Some(chess.White) + else if f contains 'b' then Some(chess.Black) else None, moveBy = - if (f contains 'B') Some(chess.Black) - else if (f contains 'W') Some(chess.White) + if f contains 'B' then Some(chess.Black) + else if f contains 'W' then Some(chess.White) else None, troll = f contains 't' ) @@ -334,8 +334,8 @@ object LilaOut: case _ => None - def commas(str: String): Array[String] = if (str == "-") Array.empty else str split ',' + def commas(str: String): Array[String] = if str == "-" then Array.empty else str split ',' def boolean(str: String): Boolean = str == "+" - def optional(str: String): Option[String] = if (str == "-") None else Some(str) + def optional(str: String): Option[String] = if str == "-" then None else Some(str) def readColor(str: String): Color = Color.fromWhite(str == "w") def readOptionalColor(str: String): Option[Color] = optional(str) map readColor diff --git a/src/main/scala/netty/NettyServer.scala b/src/main/scala/netty/NettyServer.scala index b41ee22b..50b2aca4 100644 --- a/src/main/scala/netty/NettyServer.scala +++ b/src/main/scala/netty/NettyServer.scala @@ -28,13 +28,13 @@ final class NettyServer( val workerThreads = config.getInt("netty.threads") val (bossGroup, workerGroup, channelClz) = - if (!config.getBoolean("netty.native")) + if !config.getBoolean("netty.native") then ( NioEventLoopGroup(1), NioEventLoopGroup(workerThreads), classOf[NioServerSocketChannel] ) - else if (System.getProperty("os.name").toLowerCase.startsWith("mac")) + else if System.getProperty("os.name").toLowerCase.startsWith("mac") then ( KQueueEventLoopGroup(1), KQueueEventLoopGroup(workerThreads), @@ -52,16 +52,16 @@ final class NettyServer( boot .group(bossGroup, workerGroup) .channel(channelClz) - .childHandler(new ChannelInitializer[Channel] { - override def initChannel(ch: Channel): Unit = { - val pipeline = ch.pipeline() - pipeline.addLast(HttpServerCodec()) - pipeline.addLast(HttpObjectAggregator(4096)) - pipeline.addLast(RequestHandler(router)) - pipeline.addLast(ProtocolHandler(connector)) - pipeline.addLast(FrameHandler(connector)) - } - }) + .childHandler( + new ChannelInitializer[Channel]: + override def initChannel(ch: Channel): Unit = + val pipeline = ch.pipeline() + pipeline.addLast(HttpServerCodec()) + pipeline.addLast(HttpObjectAggregator(4096)) + pipeline.addLast(RequestHandler(router)) + pipeline.addLast(ProtocolHandler(connector)) + pipeline.addLast(FrameHandler(connector)) + ) val server = boot.bind(port).sync().channel() diff --git a/src/main/scala/util/Chronometer.scala b/src/main/scala/util/Chronometer.scala index b62f6529..63184ec8 100644 --- a/src/main/scala/util/Chronometer.scala +++ b/src/main/scala/util/Chronometer.scala @@ -9,7 +9,7 @@ object Chronometer: def micros = (nanos / 1000).toInt def logIfSlow(threshold: Int)(msg: A => String) = - if (millis >= threshold) println(s"<${millis}ms> ${msg(result)}") + if millis >= threshold then println(s"<${millis}ms> ${msg(result)}") this def pp: A = @@ -20,10 +20,10 @@ object Chronometer: println(s"chrono $msg - $showDuration") result def ppIfGt(msg: String, duration: FiniteDuration): A = - if (nanos > duration.toNanos) pp(msg) + if nanos > duration.toNanos then pp(msg) else result - def showDuration: String = if (millis >= 1) f"$millis ms" else s"$micros micros" + def showDuration: String = if millis >= 1 then f"$millis ms" else s"$micros micros" case class FuLap[A](lap: Future[Lap[A]]) extends AnyVal: diff --git a/src/main/scala/util/DedupEmit.scala b/src/main/scala/util/DedupEmit.scala index 97465012..700331e3 100644 --- a/src/main/scala/util/DedupEmit.scala +++ b/src/main/scala/util/DedupEmit.scala @@ -13,7 +13,7 @@ final class DedupEmit[A](interval: FiniteDuration)(emit: Emit[A])(using private var seen = Set.empty[A] def apply(a: A): Unit = - if (!seen(a)) + if !seen(a) then seen = seen + a emit(a) diff --git a/src/main/scala/util/EventBus.scala b/src/main/scala/util/EventBus.scala index 4205f054..e2b127bf 100644 --- a/src/main/scala/util/EventBus.scala +++ b/src/main/scala/util/EventBus.scala @@ -12,19 +12,16 @@ final class EventBus[Event, Channel, Subscriber]( def subscribe(channel: Channel, subscriber: Subscriber): Unit = entries.compute( channel, - (_, subs) => { - Option(subs).fold(Set(subscriber))(_ + subscriber) - } + (_, subs) => Option(subs).fold(Set(subscriber))(_ + subscriber) ) def unsubscribe(channel: Channel, subscriber: Subscriber): Unit = entries.computeIfPresent( channel, - (_, subs) => { + (_, subs) => val newSubs = subs - subscriber - if (newSubs.isEmpty) null + if newSubs.isEmpty then null else newSubs - } ) def publish(channel: Channel, event: Event): Unit = diff --git a/src/main/scala/util/ExpireCallbackMemo.scala b/src/main/scala/util/ExpireCallbackMemo.scala index 57c83960..0326d0cb 100644 --- a/src/main/scala/util/ExpireCallbackMemo.scala +++ b/src/main/scala/util/ExpireCallbackMemo.scala @@ -20,16 +20,14 @@ final class ExpireCallbackMemo[K]( def put(key: K): Unit = timeouts.compute( key, - (_, canc) => { + (_, canc) => Option(canc).foreach(_.cancel()) scheduler.scheduleOnce( ttl, - () => { + () => remove(key) callback(key) - } ) - } ) // does not call the expiration callback diff --git a/src/main/scala/util/GroupedWithin.scala b/src/main/scala/util/GroupedWithin.scala index cdeb86b8..9267a9e8 100644 --- a/src/main/scala/util/GroupedWithin.scala +++ b/src/main/scala/util/GroupedWithin.scala @@ -23,12 +23,12 @@ final class GroupedWithinStage[A]( def apply(elem: A): Unit = synchronized: buffer += elem - if (buffer.size >= nb) unsafeFlush() + if buffer.size >= nb then unsafeFlush() private def flush(): Unit = synchronized { unsafeFlush() } private def unsafeFlush(): Unit = - if (buffer.nonEmpty) + if buffer.nonEmpty then emit(buffer.result()) buffer.clear() scheduledFlush.cancel() diff --git a/src/main/scala/util/JsExtension.scala b/src/main/scala/util/JsExtension.scala index 303fb508..e8ce5997 100644 --- a/src/main/scala/util/JsExtension.scala +++ b/src/main/scala/util/JsExtension.scala @@ -36,7 +36,7 @@ extension (js: JsObject) def objs(key: String): Option[List[JsObject]] = arrAs(key)(_.asOpt[JsObject]) def add(pair: (String, Boolean)): JsObject = - if (pair._2) js + (pair._1 -> JsBoolean(true)) + if pair._2 then js + (pair._1 -> JsBoolean(true)) else js def add[A: Writes](pair: (String, Option[A])): JsObject = diff --git a/src/main/scala/util/RateLimit.scala b/src/main/scala/util/RateLimit.scala index 4a77e17a..c1fe5765 100644 --- a/src/main/scala/util/RateLimit.scala +++ b/src/main/scala/util/RateLimit.scala @@ -16,15 +16,15 @@ final class RateLimit( private var logged: Boolean = false def apply(msg: => String = ""): Boolean = - if (credits > 0) + if credits > 0 then credits -= 1 true - else if (clearAt < nowMillis) + else if clearAt < nowMillis then credits = maxCredits clearAt = makeClearAt true else - if (!logged) + if !logged then logged = true logger.info(s"$name MSG: $msg") Monitor rateLimit name diff --git a/src/main/scala/util/RateLimitMap.scala b/src/main/scala/util/RateLimitMap.scala index 87ab88f2..cbe9bb84 100644 --- a/src/main/scala/util/RateLimitMap.scala +++ b/src/main/scala/util/RateLimitMap.scala @@ -2,8 +2,7 @@ package lila.ws import com.github.blemale.scaffeine.Scaffeine -/** Throttler that allows X operations per Y unit of time - * Not thread safe +/** Throttler that allows X operations per Y unit of time Not thread safe */ final class RateLimitMap( name: String, @@ -34,7 +33,7 @@ final class RateLimitMap( storage.put(k, cost -> makeClearAt) true case _ if enforce => - if (log) logDedup(s"$name $credits/$duration $k cost: $cost $msg") + if log then logDedup(s"$name $credits/$duration $k cost: $cost $msg") Monitor rateLimit name false case _ => true @@ -42,6 +41,6 @@ final class RateLimitMap( private var lastLog = "" private def logDedup(msg: String) = - if (msg != lastLog) + if msg != lastLog then lastLog = msg logger.info(msg)