转载请注明出处
http://sunxiaodou.com/2017/08/02/Java通过ESL连接FreeSWITCH/
本文来自【孫小逗的博客】
Java通过ESL连接FreeSWITCH
创建Gradle项目
首先我们创建一个基于Gradle的Java工程,并添加FreeSWITCH ESL的Java依赖。
1
| compile 'org.freeswitch.esl.client:org.freeswitch.esl.client:0.9.2'
|
创建ESLTest.java文件,并添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| private static final Logger log = LoggerFactory.getLogger(ESLTest.class);
private static final String HOST = "192.168.1.22"; private static final int PORT = 8021; private static final String PASSWORD = "ClueCon";
private static String job_UUID = null;
public static void main(String[] args) { InBound(); }
private static void InBound() {
Client client = new Client(); try { client.connect(HOST, PORT, PASSWORD, 20); System.out.println("连接成功"); } catch (Exception e) { log.error("Connect Failed", e); }
client.addEventListener(new IEslEventListener() { @Override public void eventReceived(EslEvent event) { if (event.getEventName().equals("CHANNEL_ANSWER")) { System.out.println("通道应答"); } else if (event.getEventName().equals("HEARTBEAT")) { System.out.println("收到心跳 --> " + event.getEventBodyLines()); job_UUID = client.sendAsyncApiCommand("status", null); System.out.println("Job_UUID --> " + job_UUID); } else if (event.getEventName().equals("CHANNEL_DESTROY")) { System.out.println("通道销毁"); } else if (event.getEventName().equals("CHANNEL_HANGUP_COMPLETE")) { System.out.println("通道挂断完成"); } else if (event.getEventName().equals("CHANNEL_CREATE")) { System.out.println("通道创建"); } }
@Override public void backgroundJobResultReceived(EslEvent event) { String uuid = event.getEventHeaders().get("Job-UUID"); if (job_UUID.equals(uuid)) { for (String s : event.getEventBodyLines()) { System.out.println(s); } } } });
client.setEventSubscriptions("plain", "all");
}
|
我们使用InBound模式与FreeSWITCH进行连接,我这边的FreeSWITCH运行在192.168.1.22机器上,InBound模式默认是8021端口,密码默认为ClueCon,20为连接超时时长,单位秒。
FreeSWITCH每隔20秒会发送心跳事件,代码中收到心跳事件,会发送一个异步API去查看FreeSWITCH的状态,并返回一个Job_UUID,异步完成后通过backgroundJobResultReceived
回调执行结果。