Commit c4f8ee6d authored by 神楽坂玲奈's avatar 神楽坂玲奈

版本0.5.3 大厅实时刷新

parents e075ad12 e284688b
...@@ -65,4 +65,4 @@ Rake::RDocTask.new do |rdoc| ...@@ -65,4 +65,4 @@ Rake::RDocTask.new do |rdoc|
rdoc.options << '--line-numbers' rdoc.options << '--line-numbers'
end end
CLOBBER.include %w(error-程序出错请到论坛反馈.txt log.log profile.log config.yml doc ygocore/pics) + list('replay') + list('ygocore/replay') + list('.').keep_if{|file|File.basename(file) == "Thumbs.db"} + list("graphics/avatars").keep_if{|file|File.basename(file) =~ /.*_(?:small|middle|large)\.png/} + list("ygocore/deck").keep_if{|file|File.basename(file) != 'sample.ydk'} CLOBBER.include %w(error-程序出错请到论坛反馈.txt log.log profile.log config.yml doc ygocore/pics) + list('replay') + list('ygocore/replay') + list('.').keep_if{|file|File.basename(file) == "Thumbs.db"} + list("graphics/avatars").keep_if{|file|File.basename(file) =~ /.*_(?:small|middle|large)\.png/} + list("ygocore/deck").keep_if{|file|File.basename(file) != 'sample.ydk'}
\ No newline at end of file
This diff is collapsed.
class Game_Event class Game_Event
def self.parse(header, data) def self.parse(header, data)
case header case header
when :login when :login
if data if data
Login.new parse_user data Login.new parse_user data
else else
Error.new('登录', '用户名或密码错误') Error.new('登录', '用户名或密码错误')
end end
when :users when :users
AllUsers.new data.collect{|user|parse_user(user)} AllUsers.new data.collect{|user|parse_user(user)}
when :rooms when :rooms
rooms_wait = [] rooms_wait = []
rooms_start = [] rooms_start = []
data.each do |room| data.each do |room|
room = parse_room(room) room = parse_room(room)
if room.full? if room.full?
rooms_start << room rooms_start << room
else else
rooms_wait << room rooms_wait << room
end end
end end
AllRooms.new rooms_wait + rooms_start AllRooms.new rooms_wait + rooms_start
when :newuser when :newuser
NewUser.new parse_user data NewUser.new parse_user data
when :missinguser when :missinguser
MissingUser.new parse_user data MissingUser.new parse_user data
when :newroom when :newroom
NewRoom.new parse_room data NewRoom.new parse_room data
when :missingroom when :missingroom
MissingRoom.new parse_room data MissingRoom.new parse_room data
when :chat when :chat
case data[:channel] case data[:channel]
when :lobby when :lobby
Chat.new ChatMessage.new User.new(data[:from][:id],data[:from][:name]), data[:message], :lobby Chat.new ChatMessage.new User.new(data[:from][:id],data[:from][:name]), data[:message], :lobby
else else
Chat.new ChatMessage.new User.new(data[:from][:id],data[:from][:name]), data[:message], User.new(data[:channel]) Chat.new ChatMessage.new User.new(data[:from][:id],data[:from][:name]), data[:message], User.new(data[:channel])
end end
end end
end end
def self.parse_room(room) def self.parse_room(room)
result = Room.new(room[:id], room[:name]) result = Room.new(room[:id], room[:name])
result.player1 = room[:player1] && parse_user(room[:player1]) result.player1 = room[:player1] && parse_user(room[:player1])
result.player2 = room[:player2] && parse_user(room[:player2]) result.player2 = room[:player2] && parse_user(room[:player2])
result.pvp = room[:pvp] result.pvp = room[:pvp]
result.match = room[:match] result.match = room[:match]
result.status = room[:status] result.status = room[:status]
result result
end end
def self.parse_user(user) def self.parse_user(user)
User.new(user[:id], user[:name], user[:certified]) User.new(user[:id], user[:name], user[:certified])
end end
end end
\ No newline at end of file
...@@ -5,6 +5,7 @@ require 'open-uri' ...@@ -5,6 +5,7 @@ require 'open-uri'
class Ygocore < Game class Ygocore < Game
attr_reader :username attr_reader :username
attr_reader :password attr_reader :password
attr_reader :irc_users
@@config = YAML.load_file("lib/ygocore/server.yml") @@config = YAML.load_file("lib/ygocore/server.yml")
def initialize def initialize
super super
...@@ -13,6 +14,7 @@ class Ygocore < Game ...@@ -13,6 +14,7 @@ class Ygocore < Game
load 'lib/ygocore/room.rb' load 'lib/ygocore/room.rb'
load 'lib/ygocore/scene_lobby.rb' load 'lib/ygocore/scene_lobby.rb'
require 'json' require 'json'
@irc_users = []
end end
def refresh_interval def refresh_interval
60 60
...@@ -38,6 +40,58 @@ class Ygocore < Game ...@@ -38,6 +40,58 @@ class Ygocore < Game
end end
end end
def user=(user)
super
begin
require 'net/yail'
$log.info('聊天'){user.inspect}
@irc = Net::YAIL.new(
address: 'card.touhou.cc',
username: hexencode(user.id),
nicknames: [hexencode(user.name), hexencode("#{user.name}_#{rand(10000)}"), hexencode("#{user.name}_#{rand(10000)}")])
$log.info('聊天连接')
@irc.on_welcome proc { |event| $log.info('连接聊天服务器成功'); Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'system'), '聊天服务器连接成功,聊天功能测试中,可能引发程序崩溃,如果崩得过于频繁请暂时不要使用.', :lobby))); @irc.join('#lobby') }
@irc.hearing_msg {|event|
user = User.new(hexdecode(event.msg.user).to_sym, hexdecode(event.nick))
Game_Event.push Game_Event::Chat.new(ChatMessage.new(user, event.message, event.channel ? event.channel[1,event.channel.size-1].to_sym : user))
}
@irc.heard_namreply{|event|
@irc_users.concat @irc.instance_variable_get(:@nicklist).collect {|user|
User.new(hexdecode(user).to_sym, hexdecode(user))
}
Game_Event.push Game_Event::AllUsers.new(@users|@irc_users)
$log.info('irc用户列表'){user}
}
@irc.heard_join{|event|
user = User.new(hexdecode(event.msg.user).to_sym, hexdecode(event.nick))
Game_Event.push Game_Event::NewUser.new(user)
$log.info('irc用户上线'){user}
}
@irc.heard_quit{|event|
user = User.new(hexdecode(event.msg.user).to_sym, hexdecode(event.nick))
Game_Event.push Game_Event::MissingUser.new(user)
$log.info('irc用户下线'){user}
}
#@irc.hearing_join {}
$log.info('聊天开始监听')
@irc.start_listening
$log.info('聊天加载完毕')
rescue Exception => exception
$log.error('聊天出错'){[exception.inspect, *exception.backtrace].collect{|str|str.encode("UTF-8")}.join("\n")}
Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'system'), '连接聊天服务器失败', :lobby)))
end
end
def chat(chatmessage)
$log.info('发送聊天消息'){chatmessage.inspect}
return unless @irc
case chatmessage.channel
when Symbol
@irc.msg "##{chatmessage.channel}", chatmessage.message
when User
@irc.msg hexencode(chatmessage.channel.id), chatmessage.message
end
$log.info('发送聊天消息完毕')
end
def host(room_name, room_config) def host(room_name, room_config)
room = Room.new(0, room_name) room = Room.new(0, room_name)
room.pvp = room_config[:pvp] room.pvp = room_config[:pvp]
...@@ -65,6 +119,11 @@ class Ygocore < Game ...@@ -65,6 +119,11 @@ class Ygocore < Game
@recv.exit if @recv @recv.exit if @recv
@recv = nil @recv = nil
end end
def exit
(@irc.quit if @irc) rescue nil
@irc = nil
@chat_thread = nil
end
def ygocore_path def ygocore_path
"ygocore/gframe.exe" "ygocore/gframe.exe"
end end
...@@ -193,4 +252,4 @@ class Ygocore < Game ...@@ -193,4 +252,4 @@ class Ygocore < Game
end end
end end
get_announcements get_announcements
end end
\ No newline at end of file
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