FreeSWITCH之lua脚本事件订阅

目录

相关接口简要说明

Even

EventConsumer

pop获取事件

bind订阅

代码示例

事件创建

事件订阅


FreeSWITCH中通过订阅事件,我们能获取到各种实时信息,进而可以对通话进行精确的控制。在lua中我们既能方便地订阅各种事件,也能自己生成所需的事件。

相关接口简要说明

Even

freeswitch.Event创建一个事件,然后添加内容,最后发出

  • event:addBody

  • event:addHeader

  • event:fire

 

EventConsumer

freeswitch.EventConsumer:订阅一个事件,获取内容

  • event:getBody

  • event:getHeader

  • event:getType

  • event:serialize

 

序列化输出获取的事件内容

-- Print as text

io.write(params:serialize());

io.write(params:serialize("text")); 

-- Print as JSON

io.write(params:serialize("json"));

 

pop获取事件

订阅事件后,通过pop获取事件:

con = freeswitch.EventConsumer("<event_name>"[,"<subclass type>"]); 

-- pop() returns an event or nil if no events

con:pop() 

-- pop(1) blocks until there is an event

con:pop(1) 

-- pop(1,500) blocks for max half a second until there is an event

 

bind订阅

通过bind订阅所需事件

con = freeswitch.EventConsumer();

con:bind("RELOADXML");

con:bind("SHUTDOWN");

con:bind("CUSTOM", "multicast::event");

 

代码示例

事件创建

local event = freeswitch.Event("custom", "Xugd::Quit")
event:addHeader("myKey", "MyValue")
event:fire()

 

事件订阅

订阅指定事件,获取并输出,直到有退出事件

local con = freeswitch.EventConsumer();
con:bind("SHUTDOWN")
con:bind("CUSTOM", "Xugd::MyStatus")
con:bind("CUSTOM", "Xugd::Quit")

while true do
    local evt = con:pop(1)
    local eType = evt:getType() 
    freeswitch.consoleLog("DEBUG", "Get Event: " .. eType .. ", " .. type(eType) .. "\n")
    if eType == "SHUTDOWN" then
        freeswitch.consoleLog("INFO", "SHUTDOWN: To Quit\n")
        break
    end
    
    if eType == "CUSTOM" then 
        local eClass = evt:getHeader("Event-Subclass")      
        freeswitch.consoleLog("DEBUG", "Event-Subclass: " .. eClass .. "\n")
        if eClass == "Xugd::Quit" then
            freeswitch.consoleLog("INFO", "Xugd::Quit: To Quit\n")
            break
        end
        
        if eClass == "Xugd::MyStatus" then
            local status= evt:getHeader("MyStaus")
            .....           
            freeswitch.consoleLog("INFO", "Xugd::MyStatus: " .. status .. "\n") 
        end
    end -- if-type  
end -- while

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值