node.js 개발 (3-4)
2013년 9월 4일 수요일
Server 구현
User의 Stage
/**
* server/stage.js
* 각종 스테이지들
*
*/
// module
var util = require('util')
// include
var proto = require('../common/protocol')
var utils = require('../common/utils')
// init
var InitStage = function (user) {
this.name = 'Init'
this.user = user
}
util._extend(InitStage.prototype, {
start: function () {},
recvConnect: function () {
this.sendConnect()
this.user.goLogin()
},
sendConnect: function () {
this.user.send(proto.PK_CONNECT, 'OK')
},
clientLink: function (header, data) {
if (header == proto.PK_CONNECT) {
this.recvConnect()
}
},
})
// in login
var LoginStage = function (user) {
this.name = 'Login'
this.user = user
}
util._extend(LoginStage.prototype, {
start: function () {},
recvLogin: function (name) {
this.user.nickname = name
this.user.logined = true
var err = this.user.goLobby()
this.sendLogin(err)
},
sendChat: function (talker, message) {
this.user.send(proto.PK_LOBBY_CHAT, { name: talker.nickname, message: message })
},
sendLogin: function (err) {
if (!err) {
this.user.send(proto.PK_LOGIN, 'OK')
} else {
this.user.send(proto.PK_LOGIN, ret)
}
},
clientLink: function (header, data) {
if (header == proto.PK_LOGIN) {
var name = data.toString('utf-8')
this.recvLogin(name)
}
},
})
// in lobby
var LobbyStage = function (user) {
this.name = 'Lobby'
this.user = user
}
util._extend(LobbyStage.prototype, {
start: function () {},
recvLobbyChat: function (message) {
this.user.lobby.chat(this.user, message)
},
clientLink: function (header, data) {
if (header == proto.PK_LOBBY_CHAT) {
var message = data.toString('utf-8')
this.recvLobbyChat(message)
}
},
})
module.exports = {
InitStage: InitStage,
LoginStage: LoginStage,
LobbyStage: LobbyStage,
}