Tyrian
A Tyrian-based implementation implementation of ShowdownClient.
Connecting to the server
You can use TyrianShowdownClient#openConnection to connect to the Pokemon Showdown server. It uses Tyrian's Cmd system
case class Model(connection: Option[TyrianShowdownConnection[F]])
enum Msg:
case Connected(connection: Either[String, TyrianShowdownConnection[F]])
case ShowdownEvent(event: TyrianConnectionEvent[Either[ProtocolError, ServerMessage]])
object Main extends TyrianAppF[F, Msg, Model]:
def init(flags: Map[String, String]): (Model, Cmd[F, Msg]) =
(
Model.init,
TyrianShowdownConnection[F].openConnection().map(Connected.apply)
)
def update(model: Model): Msg => (Model, Cmd[F, Model]) =
case Connected(Right(connection)) => (model.copy(connection = Some(connection)), Cmd.None)
case Connected(Left(error)) =>
println(s"Error: $error")
(model, Cmd.None)
case ShowdownEvent(_) => (model, Cmd.None)
Receiving messages
Socket events, including messages, can be received using Tyrian's subscription system.
def subscriptions(model: Model): Sub[F, Msg] =
model.connection.fold(Sub.None)(_.serverMessages.map(Msg.ShowdownEvent.apply))
In this article