WebSocketでネトゲ作るよ〜 キーイベントの同期
今現在のサーバー側コード(の一部)
クライアント側(zappaを通した記述)
@client '/index.js': -> window.soc = @connect() window.onkeydown = (e)-> console.log "keydown"+e.keyCode soc.emit "keydown",code:e.keyCode window.onkeyup = (e)-> console.log "keyup"+e.keyCode soc.emit "keyup", code:e.keyCode
キーコードを送ってる。正直ブラウザ依存あるのでfromCharCodeから変換したほうがいい気がしてるし、する。
サーバー(zappa)
# 新しいユーザーのログイン @on connection: -> d "Connected: #{@id}" players[@id] = id:@id,keys:{} @emit 'connection',map:game.stage._map d "players:"+(k for k,v of players).join() # ログアウト処理 @on disconnect: -> delete players[@id] d "Disconnected: #{@id}" d "players:"+(k for k,v of players).join() # キーコード受取り @on keydown: -> players[@id].keys[@data.code] = 1 console.log @id+" push "+@data.code console.log players[@id].keys @on keyup: -> players[@id].keys[@data.code] = 0 console.log @id+" left "+@data.code console.log players[@id].keys
d = console.log
サーバー側のロガー
Connected: 10335976501119295222 players:10335976501119295222 10335976501119295222 push 37 { '37': 1 } 10335976501119295222 push 38 { '37': 1, '38': 1 } 10335976501119295222 left 37 { '37': 0, '38': 1 } 10335976501119295222 push 39 { '37': 0, '38': 1, '39': 1 } 10335976501119295222 left 38 { '37': 0, '38': 0, '39': 1 } 10335976501119295222 left 39 { '37': 0, '38': 0, '39': 0 } 10335976501119295222 push 37 { '37': 1, '38': 0, '39': 0 }
TODO: ユーザー名とセッションIDのヒモ付、まともなロガー