SourceForge: tilescape/tilescape: changeset 24:ad80d0da68d5
Merged \"Fixed drag bug at least on Eclipse internal browser\" with \"tilescapeSendMessageToServer(msg) to send messages only to current game\"
authorkato
Thu Apr 02 22:15:18 2009 +0300 (7 months ago)
changeset 24ad80d0da68d5
parent 23c901f4bf86cc
parent 226a6d2069d68c
child 257d642298982d
Merged \"Fixed drag bug at least on Eclipse internal browser\" with \"tilescapeSendMessageToServer(msg) to send messages only to current game\"
     1.1 --- a/src/main/scala/net/inapt/tilescape/comet/GameActor.scala	Thu Apr 02 22:10:57 2009 +0300
     1.2 +++ b/src/main/scala/net/inapt/tilescape/comet/GameActor.scala	Thu Apr 02 22:15:18 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	Thu Apr 02 22:10:57 2009 +0300
     2.2 +++ b/src/main/scala/net/inapt/tilescape/comet/GameServer.scala	Thu Apr 02 22:15:18 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	Thu Apr 02 22:10:57 2009 +0300
     3.2 +++ b/src/main/scala/net/inapt/tilescape/model/Game.scala	Thu Apr 02 22:15:18 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