声网sdk实战-网络电话
产品经理:咱们下一期的需求主要是加上语聊的功能。
程序员:什么语聊啊?能具体点吗?
产品经理:简单。就类似微信的网络电话。咱们先不做视频聊天。界面直接扒微信的,一周能搞定吧?
程序员:。。。。。。
为什么写这个sdk?
如果是十年前,程序员肯定会说“简单你妹啊”。但是现在不同了,这类基础服务有很多优秀的第三方平台提供。IM、网络电话、视频聊天真的很简单!
已经很简单了,我写这篇文章的意义何在呢?让它更简单!
前段时间,我们实现语聊选择了声网,集成sdk、熟悉api、功能调试(产品功能,不只是demo),完全下来花了3周的时间。老大对这个时间不是很满意。对于小公司,需求调研、功能开发、试错验证,每一步都要加紧脚步,不然很难活下去。所以,找理由没意义,我们为什么不把**“网络电话”**这个需求再次封装成一个sdk,供后来者直接使用,更快地集成。
我们把这个sdk称作“基于声网平台的网络电话sdk”,以下简称**“网络电话sdk”**。
需要集成的声网模块
- 语音通话:Agora RTC(Real-time Communications)SDK
- 实时消息:Agora RTM (Real-time Messaging) SDK
时序图-主叫视角
该uml主要记录了主叫方状态转移的主要过程(黄色标签),以及状态转移的条件(绿色箭头)
时序图-被叫视角
该uml主要记录了被叫方状态转移的主要过程(黄色标签),以及状态转移的条件(绿色箭头)
程序设计
- 状态管理,使用状态机,用到squirrel-foundation。(一般超过3个状态就有必要使用状态机)
- 用到委托模式。
NetPhone.java
作为对外开放的接口类,委托CallingSide.java
、CalledSide.java
实现主叫、被叫的具体逻辑。而对于使用者,它的电话当然可以是主叫、也可以是被叫。但是我们在实现上把电话分为主叫和被叫,方便理解和测试。 - java实现委托比较繁琐,所以我们引入
Lombok
这个工具,一行注解就完成了委托的实现。