1.1 --- a/src/main/scala/net/inapt/tilescape/comet/GameActor.scala Wed Apr 01 22:00:38 2009 +0300
1.2 +++ b/src/main/scala/net/inapt/tilescape/comet/GameActor.scala Wed Apr 01 23:20:05 2009 +0300
1.3 @@ -44,8 +44,8 @@
1.4 }
1.5
1.6 override def lowPriority = {
1.7 - case GameServerUpdate(value) =>
1.8 - val v = value.foldLeft(Noop)((a,b) => a & Run(invocationFunction(b.msg)))
1.9 + case GameUpdate(value) =>
1.10 + val v = value.foldLeft(Noop)((a,b) => a & Run(invocationFunction(b.toMsg)))
1.11 partialUpdate(v)
1.12 case AnnounceNewUser(u) =>
1.13 partialUpdate(AppendHtml(usersId, userLine(u)))
1.14 @@ -68,14 +68,18 @@
1.15 }
1.16
1.17 private def sendChatMessage(name : String, msg: String) {
1.18 - Log.info("Sending message "+msg+" to chat server")
1.19 ChatServer ! ChatServerMsg(name, msg)
1.20 }
1.21
1.22 private def invocationFunction(s : String) = "tilescapeReceiveServerMessage('"+urlEncode(s)+"')"
1.23
1.24 - override lazy val fixedRender: Box[NodeSeq] = {
1.25 - Script(Function("tilescapeSendMessageToServer", List("msg"), ajaxCall(JsVar("msg"), jsSendMessage _)._2))
1.26 + override def fixedRender: Box[NodeSeq] = {
1.27 + user.currentGame match {
1.28 + case Some(game) =>
1.29 + Script(Function("tilescapeSendMessageToServer", List("msg"), ajaxCall(JsVar("msg"), jsSendMessage (game, _))._2))
1.30 + case None =>
1.31 + Script(Function("tilescapeSendMessageToServer", List("msg"), Run("alert('Not connected to server')")))
1.32 + }
1.33 }
1.34
1.35 override def render = {
1.36 @@ -132,9 +136,10 @@
1.37 AppendHtml(errorId, Text(e.msg))
1.38 }
1.39
1.40 - def jsSendMessage(msg: String) = { sendMessage(msg); Noop }
1.41 -
1.42 - def sendMessage(msg: String) = server ! GameServerMsg(this, msg.trim)
1.43 + def jsSendMessage(game: Game, msg: String) = {
1.44 + server ! GameEventMessage(this, game, msg.trim)
1.45 + Noop
1.46 + }
1.47
1.48 def jsJoinGame(game : Game) = { server ! JoinGame(this, game) ; Noop }
1.49
2.1 --- a/src/main/scala/net/inapt/tilescape/comet/GameServer.scala Wed Apr 01 22:00:38 2009 +0300
2.2 +++ b/src/main/scala/net/inapt/tilescape/comet/GameServer.scala Wed Apr 01 23:20:05 2009 +0300
2.3 @@ -23,10 +23,9 @@
2.4
2.5 def act = loop {
2.6 react {
2.7 - case GameServerMsg(sender, msg) if msg.length > 0 =>
2.8 - val m = GameMessage(sender, msg)
2.9 - messages ::= m
2.10 - listeners.foreach (_ ! GameServerUpdate(List(m)))
2.11 + case GameEventMessage(sender, game, msg) =>
2.12 + val l = game.process(msg)
2.13 + listeners.foreach (_ ! GameUpdate(l))
2.14
2.15 case GetUserList =>
2.16 reply(UserList(listeners.map(_.user)))
2.17 @@ -59,7 +58,6 @@
2.18 listeners.foreach (_ ! AnnounceLeftPlayer(game, sender.user) )
2.19
2.20 case GameServerAdd(me) =>
2.21 - me ! GameServerUpdate(messages)
2.22 listeners.foreach (_ ! AnnounceNewUser(me.user))
2.23 listeners ::= me
2.24
2.25 @@ -73,10 +71,11 @@
2.26 this.start
2.27 }
2.28
2.29 +case class GameEventMessage(sender : Actor, game: Game, msg: String)
2.30 case class GameServerError(msg: String)
2.31 case class GameMessage(sender : Actor, msg: String)
2.32 case class GameServerMsg(sender: GameActor, msg: String)
2.33 -case class GameServerUpdate(msg: List[GameMessage])
2.34 +case class GameUpdate(msg: List[GameEvent])
2.35 case class GameServerAdd(me: GameActor)
2.36 case class AnnounceNewUser(user : User)
2.37 case class GameServerRemove(me: GameActor)
3.1 --- a/src/main/scala/net/inapt/tilescape/model/Game.scala Wed Apr 01 22:00:38 2009 +0300
3.2 +++ b/src/main/scala/net/inapt/tilescape/model/Game.scala Wed Apr 01 23:20:05 2009 +0300
3.3 @@ -8,14 +8,14 @@
3.4 import net.inapt.tilescape.comet.GameActor
3.5
3.6 abstract class RuleSet {
3.7 - def process(msg : GameMessage)
3.8 + def process(msg : String) : List[GameEvent] {}
3.9 }
3.10
3.11 /**
3.12 * Just passes through the messages from clients
3.13 */
3.14 class ClientRuleSet extends RuleSet {
3.15 - def process(msg : GameMessage) { }
3.16 + def process(msg : String) : List[GameEvent] = new StringGameEvent(msg) :: Nil
3.17 }
3.18
3.19 object GameStatus extends Enumeration {
3.20 @@ -23,7 +23,12 @@
3.21 val PreGame, Ongoing, Finished = Value
3.22 }
3.23
3.24 -case class GameMessage
3.25 +abstract case class GameEvent {
3.26 + def toMsg : String
3.27 +}
3.28 +case class StringGameEvent(val msg: String) extends GameEvent {
3.29 + override def toMsg = msg
3.30 +}
3.31
3.32 class Game (val name : String, val ruleset : RuleSet, var initiator : User) {
3.33 private var players = List[User]()
3.34 @@ -34,5 +39,5 @@
3.35
3.36 def leave(player : User) { players -= player }
3.37
3.38 - def process(msg : GameMessage) { ruleset.process(msg) }
3.39 + def process(msg : String) : List[GameEvent] = { ruleset.process(msg) }
3.40 }
3.41 \ No newline at end of file