Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #1

Merged
merged 7 commits into from
Jun 8, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ production:
```ruby
AliyunIot::Queue.queues ## 列出所有队列
AliyunIot::Queue[QueueName].receive_message(WaitSeconds) ## 消费消息
AliyunIot::Queue[QueueName].batch_receive_message(MessageCount, WaitSeconds) ## 批量消费消息
AliyunIot::Queue[QueueName].peek ## 查看消息
AliyunIot::Queue[QueueName].create({DelaySeconds, MaximumMessageSize, MessageRetentionPeriod, VisibilityTimeout, PollingWaitSeconds, LoggingEnabled}) ## 创建队列
AliyunIot::Queue[QueueName].delete ## 删除队列
Expand All @@ -82,7 +83,8 @@ production:

```ruby
AliyunIot::Product.create(Name) ## 创建产品
AliyunIot::Product.check_regist_state(ApplyId) ## 批量查询注册状态
AliyunIot::Product.batch_get_device_state({DeviceName.1, DeviceName.2 ....}) ## 批量查询设备状态
AliyunIot::Product.check_regist_state(ApplyId) ## 查询注册状态
AliyunIot::Product.list_regist_info(ApplyId, PageSize, CurrentPage) ## 批量查询注册状态
AliyunIot::Product[ProductKey].update({ProductName, ProductDesc}) ## 修改产品信息
AliyunIot::Product[ProductKey].list({PageSize, CurrentPage}) ## 查询产品的设备列表
Expand Down
1 change: 1 addition & 0 deletions lib/aliyun_iot.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
require "aliyun_iot/topic"
require "aliyun_iot/message"
require "aliyun_iot/product"
require "aliyun_iot/result"

class Hash
def self.xml_array content, *path
Expand Down
28 changes: 16 additions & 12 deletions lib/aliyun_iot/message.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
require "aliyun_iot/request/xml"
module AliyunIot
class Message
attr_reader :queue, :id, :body_md5, :body, :receipt_handle, :enqueue_at, :first_enqueue_at, :next_visible_at, :dequeue_count, :priority
attr_reader :h, :queue, :id, :body_md5, :body, :receipt_handle, :enqueue_at, :first_enqueue_at, :next_visible_at, :dequeue_count, :priority

def initialize(queue, content)
h = Hash.xml_object(content, "Message")
def initialize(queue, h)
@h = h
@queue = queue
@id = h["MessageId"]
@body_md5 = h["MessageBodyMD5"]
@body = h["MessageBody"]
@enqueue_at = Time.at(h["EnqueueTime"].to_i/1000.0)
@first_enqueue_at = Time.at(h["FirstDequeueTime"].to_i/1000.0)
@dequeue_count = h["DequeueCount"].to_i
@priority = h["Priority"].to_i
@receipt_handle = h["ReceiptHandle"]
@next_visible_at = Time.at(h["NextVisibleTime"].to_i/1000.0)
set_message_info
end

#删除消息
Expand Down Expand Up @@ -56,6 +48,18 @@ def to_s
end

private

def set_message_info
@id = h["MessageId"]
@body_md5 = h["MessageBodyMD5"]
@body = h["MessageBody"]
@enqueue_at = Time.at(h["EnqueueTime"].to_i/1000.0)
@first_enqueue_at = Time.at(h["FirstDequeueTime"].to_i/1000.0)
@dequeue_count = h["DequeueCount"].to_i
@priority = h["Priority"].to_i
@receipt_handle = h["ReceiptHandle"]
@next_visible_at = Time.at(h["NextVisibleTime"].to_i/1000.0)
end

def set_data(query)
{mqs_headers: {"x-mns-version" => "2015-06-06"}, query: query}
Expand Down
10 changes: 6 additions & 4 deletions lib/aliyun_iot/product.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,15 @@ def regist_device(params = {})
def regist_devices(params = {})
execute params, 'ApplyDeviceWithNames'
end

def batch_get_device_state(params = {})
execute params, 'BatchGetDeviceState'
end

def pub(params = {})
raise RequestException.new(Exception.new("message MessageContent is empty!")) if params[:MessageContent].nil?
default_params = { Qos: '0' }
default_params.merge!({ Qos: '0' }) if params[:Qos].nil?
params[:MessageContent] = Base64.urlsafe_encode64(params[:MessageContent]).chomp
execute params.merge(default_params), 'Pub'
params[:MessageContent] = Base64.encode64(params[:MessageContent]).chomp
execute params, 'Pub'
end

def sub(params = {})
Expand Down
20 changes: 17 additions & 3 deletions lib/aliyun_iot/queue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def create(opts = {})
:MessageRetentionPeriod => 345600,
:PollingWaitSeconds => 0
}.merge(opts)
request.content_xml(:Queue, msg_options)
request.content(:Queue, msg_options)
end
end

Expand All @@ -57,15 +57,29 @@ def send_message(message, opts = {})
:DelaySeconds => 0,
:Priority => 8
}.merge(opts)
request.content_xml(:Message, msg_options.merge(:MessageBody => message.to_s))
request.content(:Message, msg_options.merge(:MessageBody => message.to_s))
end
end

#消费消息
def receive_message(wait_seconds = 3)
result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds})
return nil if result.nil?
Message.new(self, result)
Result.new(self, result).get_message
end

#批量消费消息
def batch_receive_message(num = 16, wait_seconds = 3)
result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds, numOfMessages: num})
return nil if result.nil?
Result.new(self, result, "Messages", "Message").get_message
end

#设置队列属性
def set_attr(opts = {})
Request::Xml.put(queue_path, query: {Metaoverride: true}) do |request|
request.content(:Queue, opts)
end
end

def queue_path
Expand Down
16 changes: 16 additions & 0 deletions lib/aliyun_iot/result.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module AliyunIot
class Result

attr_reader :h, :queue

def initialize(queue, content, *path)
@queue = queue
@h = path.blank? ? Hash.xml_object(content, "Message") : Hash.xml_array(content, *path)
end

def get_message
h.is_a?(Array) ? h.map{ |message| Message.new(queue, message) } : Message.new(queue, h)
end

end
end
2 changes: 1 addition & 1 deletion lib/aliyun_iot/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module AliyunIot
VERSION = "0.1.3"
VERSION = "0.1.4"
end