发一个我刚写的Http#用之前先把上一个exe版本的Http删掉【本人的水平拙劣,代码风格奇特,恐不符大众口味,还望见谅。
class Http Create = Win32API.new('AHttp.dll', 'Create', 'pppp', 'l') Query = Win32API.new('AHttp.dll', 'Query', 'l', 'i') Retrieve = Win32API.new('AHttp.dll', 'Retrieve', 'lp', 'i') Close = Win32API.new('AHttp.dll', 'Close', 'l', 'l') INVALID = 0; SUCCESS = 1; FAILURE = 2; PENDING = 3 def initialize(server, action, method, data="") @token = Create.call(server, action, method, data) end def query Query.call(@token) end def retrieve if query == SUCCESS length = Retrieve.call(@token, 0) buffer = "\0" * length Retrieve.call(@token, buffer) return buffer end # or nil end def close Close.call(@token) end end
class Http
Create = Win32API.new('AHttp.dll', 'Create', 'pppp', 'l')
Query = Win32API.new('AHttp.dll', 'Query', 'l', 'i')
Retrieve = Win32API.new('AHttp.dll', 'Retrieve', 'lp', 'i')
Close = Win32API.new('AHttp.dll', 'Close', 'l', 'l')
INVALID = 0; SUCCESS = 1; FAILURE = 2; PENDING = 3
def initialize(server, action, method, data="")
@token = Create.call(server, action, method, data)
end
def query
Query.call(@token)
end
def retrieve
if query == SUCCESS
length = Retrieve.call(@token, 0)
buffer = "\0" * length
Retrieve.call(@token, buffer)
return buffer
end # or nil
end
def close
Close.call(@token)
end
end
食用姿势:
第一步 下载主L跳转页里的AHttp_xx.dll并重命名为AHttp.dll放进游戏根目录
第二步 仅供参考【最后一步人工close将由 @taroxd 优化为自动close(finalizer) 等楼下出现天使触请一起愉快食用
【更多代码参考参考请见 https://rpg.blue/thread-376836-1-1.html- def hy_rgss_run(*objs)
- loop do
- Graphics.update
- Input.update
- objs.each(&:update)
- yield(*objs) if block_given?
- end
- end
- h = Http.new("www.baidu.com", "s?wd=Hello,World!", "GET")
- hy_rgss_run do
- case h.query
- when Http::SUCCESS
- # 对接收来的数据(h.retrieve)的操作
- # 比如 print h.retrieve
- when Http::FAILURE
- # 获取失败时的操作
- when Http::PENDING
- # "载入中"时的操作
- end
- break if Input.trigger?('esc')
- end
- h.close
复制代码 【Input 模块被重写了, 所以直接复制的童鞋们Input.trigger?('esc')这一行会报错
【我这也是提醒你们不要随便用 以及手动close真的很容易忽视掉 |