设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3101|回复: 9
打印 上一主题 下一主题

[通用发布] 异步可并发HTTP通信库(更新:可获取下载进度、取消操作)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

1
发表于 2015-2-24 15:04:26 | 显示全部楼层
发一个我刚写的Http#用之前先把上一个exe版本的Http删掉【本人的水平拙劣,代码风格奇特,恐不符大众口味,还望见谅。
RUBY 代码复制下载
  1. class Http
  2.   Create   = Win32API.new('AHttp.dll', 'Create',   'pppp', 'l')
  3.   Query    = Win32API.new('AHttp.dll', 'Query',    'l',    'i')
  4.   Retrieve = Win32API.new('AHttp.dll', 'Retrieve', 'lp',   'i')
  5.   Close    = Win32API.new('AHttp.dll', 'Close',    'l',    'l')
  6.   INVALID = 0;    SUCCESS = 1;    FAILURE = 2;    PENDING = 3
  7.   def initialize(server, action, method, data="")
  8.     @token = Create.call(server, action, method, data)
  9.   end
  10.   def query
  11.     Query.call(@token)
  12.   end
  13.   def retrieve
  14.     if query == SUCCESS
  15.       length = Retrieve.call(@token, 0)
  16.       buffer = "\0" * length
  17.       Retrieve.call(@token, buffer)
  18.       return buffer
  19.     end # or nil
  20.   end
  21.   def close
  22.     Close.call(@token)
  23.   end
  24. end

食用姿势:
第一步 下载主L跳转页里的AHttp_xx.dll并重命名为AHttp.dll放进游戏根目录
第二步 仅供参考【最后一步人工close将由 @taroxd 优化为自动close(finalizer) 等楼下出现天使触请一起愉快食用
【更多代码参考参考请见 https://rpg.blue/thread-376836-1-1.html
  1. def hy_rgss_run(*objs)
  2.   loop do
  3.     Graphics.update
  4.     Input.update
  5.     objs.each(&:update)
  6.     yield(*objs) if block_given?
  7.   end
  8. end

  9. h = Http.new("www.baidu.com", "s?wd=Hello,World!", "GET")
  10. hy_rgss_run do
  11.   case h.query
  12.   when Http::SUCCESS
  13.     # 对接收来的数据(h.retrieve)的操作
  14.     # 比如 print h.retrieve
  15.   when Http::FAILURE
  16.     # 获取失败时的操作
  17.   when Http::PENDING
  18.     # "载入中"时的操作
  19.   end
  20.   break if Input.trigger?('esc')
  21. end
  22. h.close
复制代码
【Input 模块被重写了, 所以直接复制的童鞋们Input.trigger?('esc')这一行会报错
【我这也是提醒你们不要随便用 以及手动close真的很容易忽视掉

点评

喵3好棒  发表于 2015-2-24 15:47
嗯 还有个Symbol#to_proc, xp的童鞋请在前面加一行class Symbol; def to_proc; lambda{|rec, *a| rec.send(self, *a)}; end; end  发表于 2015-2-24 15:12

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

2
发表于 2015-2-24 17:01:39 | 显示全部楼层
本帖最后由 kuerlulu 于 2015-2-24 17:36 编辑

还有一个下载器【噗
下载器

然后就有了 放在你游戏根目录= =   

  -fk: -azogi:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-6 14:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表