游戏协议测试记录1

上一篇 / 下一篇  2011-07-12 15:45:44 / 个人分类:游戏自动化

#################### time:2011.7.12 name:char ###################

#!proxy()
require 'socket'  
include Socket::Constants 

=begin
#
# 说明:这个工具是方便调试前端-服务器,服务器-服务器之间的协议问题。避免各个模块之间的相互等待
#
# 原理:在原来的通讯(A-B)之间,插入C结点。使通讯变成(A-C-B)。
# 在C结点当中根据需要将从A过来的协议
# a选择:转发给B
# b选择:直接使用C结点内部字符串或函数求得结果,返回A
# 以上流程从B过来的协议也可一样处理。
#
# 例如调试 前端与gateway之间的协议
# 编辑 /~/www/html/vici/realm7/config.xml
#<socket>
#<host>127.0.0.1</host>
#<port>1000</port>--将这个端口号改成自定义的端口,例如1090
#</socket>
#
# 启动原有的各个服务器
# 命令行启动
# r proxy.rb id port id port client_gateway.rb
# 在调试当中可以动态更改client_gateway.rb当中的内容。使得从flash前端过来的协议,
# 或者直接发送到gateway。或者使用client_gateway.rb当中的设定,直接返回
=end

class SKTSocket
def initialize(localip ,localport, remoteip, remoteport)
@localip = localip
@localport = localport
@remoteip = remoteip
@remoteport = remoteport
end
def create
@localsocket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(@localport, @localip)  
@localsocket.bind(sockaddr)
@localsocket.listen(5)

accept
end
def run
create
end
def accept
while true
begin
client_socket, client_sockaddr = @localsocket.accept_nonblock
puts client_socket.to_s + " has coming!"
remote_client = TCPSocket.open(@remoteip, @remoteport)
puts remote_client.to_s + " connect to remote server!"
recive client_socket, remote_client
#puts client_socket.to_s + " has gone away!"
rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR  
sleep 1
IO.select([@localsocket])  
retry
end 
end
end
def recive(client_socket, remote_client)
while true
#client recv msg
begin
msg = client_socket.recv_nonblock(8192)
#puts "recive : " + msg
if msg == ""
puts client_socket.to_s + "client has gone away!"
client_socket.close
remote_client.close
break
else
puts "recv client msg before do_parse:" + msg
msg = do_parse msg, client_socket, remote_client
puts "recv client msg after do_parse:" + msg
end
rescue Errno::EWOULDBLOCK,Errno::EAGAIN
end
#server recv msg
begin
msg = remote_client.recv_nonblock(8192)
#puts "recive : " + msg
if msg == ""
puts remote_client.to_s + "close remote_server socket"
client_socket.close
remote_client.close
break
else
puts "recv romote msg before do_parse:" + msg
msg = do_parse msg, remote_client, client_socket
puts "recv romote msg after do_parse:" + msg
end
rescue Errno::EWOULDBLOCK,Errno::EAGAIN
end
sleep 1
end
end
def close
@localsocket.close 
end
def do_filter(text)
$test_protocols.each do |protocol|
if text =~ protocol[:request]
return protocol[:handler] ? eval(protocol[:handler]) : protocol[:response]
end
end
return nil
end

def do_telnet_chars(text)
#puts text.size.to_s
protocols_len = text[0, 4].to_i
return nil if protocols_len == 0;
text = text[0, 4 + protocols_len];
end

def do_parse(line, c, s)
#puts line;
line = do_telnet_chars line
response = line
if line != nil 
#puts line.size.to_s
#puts $test_protocols_file
load $test_protocols_file
response = do_filter line
if response
c.puts(response)
else
#puts "client puts:" + line
s.puts(line)
end
end
return response ? response : line
end
end

raise "usage:ruby proxy.rb local_server_ip local_server_port remote_server_ip remote_server_port configure_filename" if ARGV.size != 5

local_host = ARGV[0]
local_port = ARGV[1].to_i
remote_host = ARGV[2]
remote_port = ARGV[3].to_i
$test_protocols_file = ARGV[4]
puts $test_protocols_file
puts <<-CONF
  local server - #{local_port}
  remote server - #{remote_host}:#{remote_port}
  test protocols file - #{$test_protocols_file}
CONF

socket_ = SKTSocket.new(local_host, local_port, remote_host, remote_port);
socket_.run
####################################################################################
#!client_gateway

def get_1002(text)
  text + "FFFF"
end


$test_protocols = [
  #{ :request => /^\d{4}\[1001(.*)\]/, :response => "FFF" }, 
  #{ :request => /^\d{4}\[1002(.*)\]/, :handler => "get_1002 text" }, 
  #{ :request => /^\d{4}\[1003(.*)\]/, :response => "FFF" }, 
  #{ :request => /^\d{4}\[6605(.*)\]/, :response => "FFF" } 
]




 


TAG:

 

评分:0

我来说两句

日历

« 2024-05-04  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 10180
  • 日志数: 15
  • 图片数: 1
  • 建立时间: 2011-04-08
  • 更新时间: 2012-07-12

RSS订阅

Open Toolbar