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

0.8.5, xmpp

parent ff51a04b
...@@ -20,7 +20,7 @@ end ...@@ -20,7 +20,7 @@ end
spec = Gem::Specification.new do |s| spec = Gem::Specification.new do |s|
s.name = 'mycard' s.name = 'mycard'
s.version = '0.8.4' s.version = '0.8.5'
s.extra_rdoc_files = ['README.txt', 'LICENSE.txt'] s.extra_rdoc_files = ['README.txt', 'LICENSE.txt']
s.summary = 'a card game' s.summary = 'a card game'
s.description = s.summary s.description = s.summary
......
...@@ -58,7 +58,7 @@ begin ...@@ -58,7 +58,7 @@ begin
if log == "STDOUT" #调试用 if log == "STDOUT" #调试用
log = STDOUT log = STDOUT
end end
$log = Logger.new(log) $log = Logger.new(log, 1, 1024000)
$log.level = Logger.const_get log_level $log.level = Logger.const_get log_level
#性能分析 #性能分析
......
...@@ -66,7 +66,7 @@ class Scene_Lobby < Scene ...@@ -66,7 +66,7 @@ class Scene_Lobby < Scene
when Game_Event::AllUsers when Game_Event::AllUsers
@userlist.items = $game.users @userlist.items = $game.users
when Game_Event::AllRooms, Game_Event::AllServers when Game_Event::AllRooms, Game_Event::AllServers
@roomlist.items = p $game.rooms.find_all { |room| @roomlist.items = $game.rooms.find_all { |room|
$game.filter[:servers].include?(room.server) and $game.filter[:servers].include?(room.server) and
$game.filter[:waiting_only] ? (room.status == :wait) : true and $game.filter[:waiting_only] ? (room.status == :wait) : true and
$game.filter[:normal_only] ? (!room.tag? && (room.ot == 0) && (room.lp = 8000)) : true $game.filter[:normal_only] ? (!room.tag? && (room.ot == 0) && (room.lp = 8000)) : true
......
...@@ -2,7 +2,7 @@ require 'open-uri' ...@@ -2,7 +2,7 @@ require 'open-uri'
require "fileutils" require "fileutils"
require_relative 'card' require_relative 'card'
module Update module Update
Version = '0.8.4' Version = '0.8.5'
URL = "http://my-card.in/mycard/update.json?version=#{Version}" URL = "http://my-card.in/mycard/update.json?version=#{Version}"
class <<self class <<self
attr_reader :thumbnails, :images, :status attr_reader :thumbnails, :images, :status
......
...@@ -27,7 +27,7 @@ class Window_Chat < Window_Scrollable ...@@ -27,7 +27,7 @@ class Window_Chat < Window_Scrollable
if !@chat_input.value.empty? if !@chat_input.value.empty?
chatmessage = ChatMessage.new($game.user, @chat_input.value, @channel) chatmessage = ChatMessage.new($game.user, @chat_input.value, @channel)
$game.chat chatmessage $game.chat chatmessage
Game_Event.push Game_Event::Chat.new(chatmessage)# if $game.show_chat_self Game_Event.push Game_Event::Chat.new(chatmessage) if !$game.is_a? Ygocore
true true
end end
end end
......
...@@ -24,7 +24,7 @@ class Window_UserInfo < Window ...@@ -24,7 +24,7 @@ class Window_UserInfo < Window
end end
@font.draw_blended_utf8(@contents, @user.name, 160, 12, 0x00,0x00,0x00) unless @user.name.empty? @font.draw_blended_utf8(@contents, @user.name, 160, 12, 0x00,0x00,0x00) unless @user.name.empty?
@font.draw_blended_utf8(@contents, "id: #{@user.id}" , 160, 12+16*2, 0x00,0x00,0x00) @font.draw_blended_utf8(@contents, @user.id.to_s , 160, 12+16*2, 0x00,0x00,0x00) unless @user.id.to_s.empty?
@font.draw_blended_utf8(@contents, "Lv: #{@user.level}" , 160, 12+16*3, 0x00,0x00,0x00) if @user.respond_to? :level and @user.level #TODO:规范化,level是iduel专属的,但是又不太想让iduel来重定义这个window @font.draw_blended_utf8(@contents, "Lv: #{@user.level}" , 160, 12+16*3, 0x00,0x00,0x00) if @user.respond_to? :level and @user.level #TODO:规范化,level是iduel专属的,但是又不太想让iduel来重定义这个window
@font.draw_blended_utf8(@contents, "经验: #{@user.exp}", 160, 12+16*4, 0x00,0x00,0x00) if @user.respond_to? :exp and @user.exp @font.draw_blended_utf8(@contents, "经验: #{@user.exp}", 160, 12+16*4, 0x00,0x00,0x00) if @user.respond_to? :exp and @user.exp
end end
......
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 :rooms #when :rooms
#AllRooms.new data.collect{|room|parse_room(room)} #AllRooms.new data.collect{|room|parse_room(room)}
#when :rooms_update #when :rooms_update
......
...@@ -17,8 +17,8 @@ class Ygocore < Game ...@@ -17,8 +17,8 @@ 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'
#require 'xmpp4r/client' require 'xmpp4r/client'
#require 'xmpp4r/muc' require 'xmpp4r/muc'
end end
def refresh_interval def refresh_interval
...@@ -28,53 +28,54 @@ class Ygocore < Game ...@@ -28,53 +28,54 @@ class Ygocore < Game
def login(username, password) def login(username, password)
@username = username @username = username
@password = password @password = password
#@nickname_conflict = [] @nickname_conflict = []
#@@im = Jabber::Client.new(Jabber::JID::new(@username, 'my-card.in', 'mycard')) @@im = Jabber::Client.new(Jabber::JID::new(@username, 'my-card.in', 'mycard'))
#@@im_room = Jabber::MUC::MUCClient.new(@@im) @@im_room = Jabber::MUC::MUCClient.new(@@im)
#Jabber.debug = true Jabber.logger = $log
Jabber.debug = true
#@@im.on_exception do |exception, c, where|
# $log.error('聊天出错') { [exception, c, where] } @@im.on_exception do |exception, c, where|
# if where == :close $log.error('聊天出错') { [exception, c, where] }
# Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天连接断开, 可能是网络问题或帐号从其他地点登录'))) if where == :close
# else Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天服务连接中断')))
# Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天连接断开, 5秒后重新连接'))) else
# sleep 5 Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天服务连接中断, 5秒后重新连接')))
# im_connect sleep 5
# end im_connect
#end end
#@@im_room.add_message_callback do |m| end
# user = m.from.resource == nickname ? @user : User.new(m.from.resource.to_sym, m.from.resource) @@im_room.add_message_callback do |m|
# Game_Event.push Game_Event::Chat.new ChatMessage.new(user, m.body, :lobby) rescue $log.error('收到聊天消息') { $! } user = m.from.resource == nickname ? @user : User.new(m.from.resource.to_sym, m.from.resource)
#end Game_Event.push Game_Event::Chat.new ChatMessage.new(user, m.body, :lobby) rescue $log.error('收到聊天消息') { $! }
#@@im_room.add_private_message_callback do |m| end
# if m.body #忽略无消息的正在输入等内容 @@im_room.add_private_message_callback do |m|
# user = m.from.resource == nickname ? @user : User.new(m.from.resource.to_sym, m.from.resource) if m.body #忽略无消息的正在输入等内容
# Game_Event.push Game_Event::Chat.new ChatMessage.new(user, m.body, user) rescue $log.error('收到私聊消息') { $! } user = m.from.resource == nickname ? @user : User.new(m.from.resource.to_sym, m.from.resource)
# end Game_Event.push Game_Event::Chat.new ChatMessage.new(user, m.body, user) rescue $log.error('收到私聊消息') { $! }
#end end
#@@im_room.add_join_callback do |m| end
# Game_Event.push Game_Event::NewUser.new User.new m.from.resource.to_sym, m.from.resource @@im_room.add_join_callback do |m|
#end Game_Event.push Game_Event::NewUser.new User.new m.from.resource.to_sym, m.from.resource
#@@im_room.add_leave_callback do |m| end
# Game_Event.push Game_Event::MissingUser.new User.new m.from.resource.to_sym, m.from.resource @@im_room.add_leave_callback do |m|
#end Game_Event.push Game_Event::MissingUser.new User.new m.from.resource.to_sym, m.from.resource
end
connect connect
#im_connect im_connect
end end
#def nickname def nickname
# return @nickname if @nickname return @nickname if @nickname
# if @nickname_conflict.include? @username if @nickname_conflict.include? @username
# 1.upto(9) do |i| 1.upto(9) do |i|
# result = "#{@username}-#{i}" result = "#{@username}-#{i}"
# return result unless @nickname_conflict.include? result return result unless @nickname_conflict.include? result
# end end
# raise 'can`t get available nickname' raise 'can`t get available nickname'
# else else
# @username @username
# end end
#end end
def connect def connect
@recv = Thread.new do @recv = Thread.new do
...@@ -88,7 +89,7 @@ class Ygocore < Game ...@@ -88,7 +89,7 @@ class Ygocore < Game
Game_Event.push Game_Event::Error.new('ygocore', '读取服务器列表失败', true) Game_Event.push Game_Event::Error.new('ygocore', '读取服务器列表失败', true)
end end
EventMachine::connect "mycard-server.my-card.in", 9997, Client #EventMachine::connect "mycard-server.my-card.in", 9997, Client
ws = WebSocket::EventMachine::Client.connect(:host => "mycard-server.my-card.in", :port => 9998); ws = WebSocket::EventMachine::Client.connect(:host => "mycard-server.my-card.in", :port => 9998);
ws.onmessage do |msg, type| ws.onmessage do |msg, type|
$log.info('收到websocket消息'){msg.force_encoding("UTF-8")} $log.info('收到websocket消息'){msg.force_encoding("UTF-8")}
...@@ -107,52 +108,58 @@ class Ygocore < Game ...@@ -107,52 +108,58 @@ class Ygocore < Game
end end
end end
#def im_connect def im_connect
# Thread.new { Thread.new {
# begin begin
# @@im.allow_tls = false @@im.allow_tls = false
# @@im.use_ssl = true @@im.use_ssl = true
# @@im.connect('my-card.in', 5223) @@im.connect('chat.my-card.in', 5223) #ruby19/windows下 使用tls连接时会卡住
# #ruby19/windows下 使用tls连接时会卡住
# begin
# @@im.auth(@password) @@im.auth(@password)
# @@im.send(Jabber::Presence.new.set_type(:available)) rescue Jabber::ClientAuthenticationFailure
# begin Game_Event.push Game_Event::Error.new('登录', '用户名或密码错误')
# nickname = nickname() Thread.exit
# @@im_room.join(Jabber::JID.new(I18n.t('lobby.room'), I18n.t('lobby.server'), nickname)) end
# rescue Jabber::ServerError => exception Game_Event.push Game_Event::Login.new User.new(@@im.jid, @username, true)
# if exception.error.error == 'conflict' @@im.send(Jabber::Presence.new.set_type(:available))
# @nickname_conflict << nickname begin
# retry nickname = nickname()
# end #@@im_room.join(Jabber::JID.new(I18n.t('lobby.room'), I18n.t('lobby.server'), nickname))
# end @@im_room.join(Jabber::JID.new('mycard', 'conference.my-card.in', nickname))
# Game_Event.push Game_Event::AllUsers.new @@im_room.roster.keys.collect { |nick| User.new(nick.to_sym, nick) } rescue p $! rescue Jabber::ServerError => exception
# rescue StandardError => exception if exception.error.error == 'conflict'
# $log.error('聊天连接出错') { exception } @nickname_conflict << nickname
# Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天服务器连接失败'))) retry
# end end
# } end
#end Game_Event.push Game_Event::AllUsers.new @@im_room.roster.keys.collect { |nick| User.new(nick.to_sym, nick) } rescue p $!
rescue StandardError => exception
$log.error('聊天连接出错') { exception }
Game_Event.push(Game_Event::Chat.new(ChatMessage.new(User.new(:system, 'System'), '聊天服务器连接失败')))
end
}
end
#def chat(chatmessage)
# case chatmessage.channel
# when :lobby
# msg = Jabber::Message::new(nil, chatmessage.message)
# @@im_room.send msg
# when User
# msg = Jabber::Message::new(nil, chatmessage.message)
# @@im_room.send msg, chatmessage.channel.id
# #send(:chat, channel: chatmessage.channel.id, message: chatmessage.message, time: chatmessage.time)
# end
#end
def chat(chatmessage) def chat(chatmessage)
case chatmessage.channel case chatmessage.channel
when :lobby when :lobby
send(:chat, channel: :lobby, message: chatmessage.message, time: chatmessage.time) msg = Jabber::Message::new(nil, chatmessage.message)
@@im_room.send msg
when User when User
send(:chat, channel: chatmessage.channel.id, message: chatmessage.message, time: chatmessage.time) msg = Jabber::Message::new(nil, chatmessage.message)
@@im_room.send msg, chatmessage.channel.id
#send(:chat, channel: chatmessage.channel.id, message: chatmessage.message, time: chatmessage.time)
end end
end end
#def chat(chatmessage)
# case chatmessage.channel
# when :lobby
# send(:chat, channel: :lobby, message: chatmessage.message, time: chatmessage.time)
# when User
# send(:chat, channel: chatmessage.channel.id, message: chatmessage.message, time: chatmessage.time)
# end
#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)
...@@ -185,8 +192,8 @@ class Ygocore < Game ...@@ -185,8 +192,8 @@ class Ygocore < Game
end end
def send(header, data=nil) def send(header, data=nil)
$log.info('发送消息') { {header: header, data: data} } #$log.info('发送消息') { {header: header, data: data} }
Client::MycardChannel.push header: header, data: data #Client::MycardChannel.push header: header, data: data
end end
def exit def exit
...@@ -330,24 +337,24 @@ class Ygocore < Game ...@@ -330,24 +337,24 @@ class Ygocore < Game
#end #end
end end
module Client #module Client
MycardChannel = EM::Channel.new # MycardChannel = EM::Channel.new
include EM::P::ObjectProtocol # include EM::P::ObjectProtocol
#
def post_init # def post_init
send_object header: :login, data: {name: $game.username, password: $game.password} # send_object header: :login, data: {name: $game.username, password: $game.password}
MycardChannel.subscribe { |msg| send_object(msg) } # MycardChannel.subscribe { |msg| send_object(msg) }
end # end
#
def receive_object obj # def receive_object obj
$log.info('收到消息') { obj.inspect } # $log.info('收到消息') { obj.inspect }
Game_Event.push Game_Event.parse obj[:header], obj[:data] # Game_Event.push Game_Event.parse obj[:header], obj[:data]
end # end
#
def unbind # def unbind
Game_Event.push Game_Event::Error.new('ygocore', '网络连接中断', true) # Game_Event.push Game_Event::Error.new('ygocore', '网络连接中断', true)
end # end
end #end
get_announcements get_announcements
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