lua模拟消息循环

lua模拟消息循环

--消息循环 单例
--[[
    --使用方法
    local message = require("scripts.app.Node.MessageManager")
    message:PostMessage(message)
    num = time / dt
    message:PostDelayMessage(message, num)
    --检测并发送消息
    message:UpdateManager_(dt)
]]--

local MessageManager = class("MessageManager")  
local queue = import("..Node.queue")

--local scheduler = require("framework.scheduler")

MessageManager.time_ = 0
MessageManager.queue_ = queue.new()
MessageManager.delayMessage_ = {}

function MessageManager:ctor()
    print("MessageManager")
    self.time_ = 1
    
    --scheduler.scheduleGlobal(MessageManager.UpdateManager_, 1)   
end

function MessageManager:PostMessage(message)
    self.queue_:puch(message)
    print("PostMessage queue:", message)
end

function MessageManager:PostDelayMessage(message, time)
    local m = {}
    m.message = message
    m.time = time
    table.insert(self.delayMessage_, m)
    print("PostDelayMessage", message, time)
end

function MessageManager:UpdateManager_(dt)
    print("message dt", dt, "update time", self.time_)
    self.time_ = self.time_ + 1
    --[[
    print(self.time_)    
    print(self.queue_:size())
    print(self.queue_.list[0])
    self.queue_:puch(1)
    print("top", self.queue_:top())
    self.queue_.list[0] = self.time_
    print(self.queue_.list[-1])
    self.queue_.list[-1] = self.time_
    ]]--
    
    while false == self.queue_:empty() do
    	print("queue top", self.queue_:top())
    	self.queue_:pop()
    end
    
    for k, v in pairs(self.delayMessage_) do
        if  0 == v.time then
            print("send delay message", k, "v", v.message, "send", self.time_)
            self.delayMessage_[k] = nil
        else
            print("delay message key", k, "v", v.message, "time", v.time)
            self.delayMessage_[k].time = v.time - 1
            --v.time = v.time - 1
        end
    end
    
end

return MessageManager
--[[ 测试消息循环 ]]--
local MessageManager = import("..Node.MessageManager")
local scheduler = require("framework.scheduler")

local MyScene = class("MyScene", function ()  
    return display.newScene("MyScene")  
end)  

messagetime = 1

local function UpdateMessage(dt)
    print("UpdateMessage")
    local message = require("scripts.app.Node.MessageManager")
    message:UpdateManager_(dt)
end

local function InsertMessage(dt)
    print("InsertMessage")
    local message = require("scripts.app.Node.MessageManager")
    if 1 == messagetime then
        message:PostMessage(messagetime)
    else
        message:PostDelayMessage(messagetime, messagetime)
    end
    messagetime = messagetime + 1
    if messagetime > 2 then messagetime = 1 end
end


function MyScene:ctor()
     -- test MessageManager
    scheduler.scheduleGlobal(UpdateMessage, 1)   
    scheduler.scheduleGlobal(InsertMessage, 3) 
    
    local message = require("scripts.app.Node.MessageManager")

    message:PostMessage(10)
    message:PostMessage(11)
    message:PostMessage(12)    
    
    message:PostDelayMessage(2, 2)
    message:PostDelayMessage(3, 3)
    message:PostDelayMessage(4, 4)
    message:PostDelayMessage(5, 5)
    
end  

return MyScene

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值