Skip to content

Commit

Permalink
Merge pull request #1 from CooCOccO/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
CooCOccO authored Jun 8, 2018
2 parents f34d2c5 + c109176 commit 512a572
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 21 deletions.
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

0 comments on commit 512a572

Please sign in to comment.