Commit 2e7e59be by Nick An

add entry and start

parent 8a3ba213
...@@ -22,4 +22,11 @@ ...@@ -22,4 +22,11 @@
x: 1, x: 1,
y: 3 y: 3
} }
}
{
type: 'game_end',
room_id: 'asdfadfaf',
payload:{
}
} }
\ No newline at end of file
...@@ -21,25 +21,31 @@ module CrazyFlirt ...@@ -21,25 +21,31 @@ module CrazyFlirt
end end
class RandomRole class RandomPicker
def initialize def initialize(clients)
@roles = %i(ghost runner runner runner) @client = clients
@x_max = 14
@y_max = 10
@rd = Random.new
end
def pick_ghost_index
size = @client.size - 1
@rd.rand(0..size)
end end
def pick_role def pick_born_point
size = @roles.size - 1 x = @rd.rand(0..@x_max)
index = Random.new.rand(0..size) y = @rd.rand(0..@y_max)
role = @roles[index] [x, y]
@roles.delete_at(index)
role
end end
end end
class Client class Client
attr_reader :key attr_reader :key
attr_accessor :role attr_accessor :role, :room
def initialize(ws) def initialize(ws)
@ws = ws @ws = ws
...@@ -47,7 +53,6 @@ module CrazyFlirt ...@@ -47,7 +53,6 @@ module CrazyFlirt
@role = nil @role = nil
end end
def msg(msg) def msg(msg)
@ws.send(msg.to_json) @ws.send(msg.to_json)
end end
...@@ -64,13 +69,14 @@ module CrazyFlirt ...@@ -64,13 +69,14 @@ module CrazyFlirt
attr_reader :clients attr_reader :clients
def initialize(name) def initialize(name)
@clients = {} @clients = []
@name = name @name = name
@status = :waiting @status = :waiting
end end
def set_client(client) def set_client(client)
@clients[client.key] = client @clients << client
client.size - 1
end end
def start! def start!
...@@ -78,7 +84,8 @@ module CrazyFlirt ...@@ -78,7 +84,8 @@ module CrazyFlirt
end end
def leave_client(key) def leave_client(key)
@clients.delete(key) idx = @clients.find_index { |c| c.key == key}
@clients.delete_at(idx)
end end
end end
...@@ -87,31 +94,32 @@ module CrazyFlirt ...@@ -87,31 +94,32 @@ module CrazyFlirt
def initialize def initialize
Faye::WebSocket.load_adapter('thin') Faye::WebSocket.load_adapter('thin')
@default_room = "default_room"
@faye = Faye::WebSocket @faye = Faye::WebSocket
@socket_pool = {} @socket_pool = {}
@room_pool = {} @room_pool = {}
@room_pool[@default_room] = GameRoom.new(@default_room)
end end
def call(env) def call(env)
return unless @faye.websocket?(env) return unless @faye.websocket?(env)
default_room = "default_room"
ws = @faye.new(env) ws = @faye.new(env)
client = ::CrazyFlirt::Client.new(ws)
@socket_pool[client.key] = client
ws.on :message do |event| ws.on :message do |event|
message = JSON.parse(event.data) message = JSON.parse(event.data)
seq = message[:seq] seq = message[:type]
command(seq, message) command(seq, message, client)
end end
ws.on :close do |event| ws.on :close do |event|
@socket_pool.delete(client.key)
client.room.leave_client(client.key)
client = nil
puts 'closed' puts 'closed'
end end
ws.rack_response ws.rack_response
end end
...@@ -121,10 +129,16 @@ module CrazyFlirt ...@@ -121,10 +129,16 @@ module CrazyFlirt
send(command, *args) send(command, *args)
end end
def clicking def start(msg)
room = @room_pool[msg['room_id']]
picker = RandomPicker.new(room.clients)
idx = picker.pick_ghost_index
ghost = room.clients[idx]
end
def clicking(msg)
room = @room_pool[msg['room_id']] room = @room_pool[msg['room_id']]
room.clients.each do |client| room.clients.each do |client|
next if client.key == msg
client.msg(msg) client.msg(msg)
end end
end end
...@@ -132,7 +146,17 @@ module CrazyFlirt ...@@ -132,7 +146,17 @@ module CrazyFlirt
def moving(msg) def moving(msg)
room = @room_pool[msg['room_id']] room = @room_pool[msg['room_id']]
room.clients.each do |client| room.clients.each do |client|
next if client.key == msg client.msg(msg)
end
end
def entry(msg, client)
room = @room_pool[msg['room_id']]
seat_index = room.set_client(client)
client.room = room
msg['cid'] = client.key
msg['payload']['seat'] = seat_index
room.clients.each do |client|
client.msg(msg) client.msg(msg)
end end
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment