声网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.javaCalledSide.java实现主叫、被叫的具体逻辑。而对于使用者,它的电话当然可以是主叫、也可以是被叫。但是我们在实现上把电话分为主叫和被叫,方便理解和测试。
  • java实现委托比较繁琐,所以我们引入Lombok这个工具,一行注解就完成了委托的实现。

源码