概述 ---- 此 C# SDK 适用于.net framework>2.0版本,基于 善理公版引擎 C++ API 构建。 安装 ~~~~ - 引用\ ``ShanliTech.EChat.SDK.DLL`` 到项目中。 **注意:SDK分为32位和64位,请根据引入的SDK设置为 ``平台目标`` ** .. figure:: D:\微信图片_20180124184017.png :alt: 微信图片\_20180124184017 微信图片\_20180124184017 文件目录 ^^^^^^^^ .. code:: ini |-eChat-CSharp-SDK_V1.0 |---libs |-----x86 |-------ShanliTech.EChat.SDK.dll |-------amrcc.dll |-------echat.dll |-------echat.ini |-------echat_log.dll |-------evrcc.dll |-------libscl.dll |-------msvcp120d.dll |-------msvcr120d.dll |-------pthreadVSE2.dll |-------vccorlib120d.dll |-----x64 依赖库文件 ^^^^^^^^^^ - 从文件夹lib拷贝关联的dll到bin目录下。 NAudio.dll、amrcc.dll、echat.dll、echat.ini、echat\_log.dll、evrcc.dll、libscl.dll、msvcp120d.dll、msvcr120d.dll、pthreadVSE2.dll、vccorlib120d.dll 其他 ^^^^ C# SDK引用了第三方的开源项目 NAudio,因此,您需要在项目中引用它(可以使用NuGet管理dll) 初始化 ~~~~~~ 初始化配置 ^^^^^^^^^^ - 传参返回值采用UTF-8编码 - ``Context`` 和 ``Dns`` 配置,修改echat.ini文件: .. code:: ini [account] context = dev [network] dns = <语音服务IP:端口> 初始化DLL加载 ^^^^^^^^^^^^^ .. code:: c# // 启动必须先完成初始化的工作,否则开发包无法正常运行 EChat.EChatApi.Init(); // 在退出前也需要对库进行释放 Chat.EChatApi.UnInit(); // 向外层发送错误通知,包括错误信息及错误码 EChat.Net.EChatApi.Instance.onError += Instance_onError; private static void Instance_onError(string message, int error) { string result = string.Empty; switch (error) { case -1: result = "账号密码错误"; break; case -2: result = "账号已欠费或超出服务期"; break; case -3: result = "账号不存在"; break; case -4: result = "无效的账号登录权限"; break; case -10: result = "账号已在其它位置登录"; break; case -11: result = "账号登录超时"; break; case -20: result = "网络连接失败"; break; case -21: result = "网络正在重连"; break; case -30: result = "加入群组失败"; break; case -31: result = "加入群组请求超时"; break; case -40: result = "当前有人正在讲话<服务器回馈>"; break; case -41: result = "短时间内不允许多次抢麦"; break; case -42: result = "摇闭状态不允许抢麦"; break; case -43: result = "内部会话状态错误<主动放麦后立马去抢麦>"; break; case -44: result = "抢麦时申请音频焦点失败"; break; case -45: result = "已较低的优先级抢麦<出现在当时正在有人讲话,自身比讲话人优先级低时>"; break; case -46: result = "网络不稳定"; break; case -50: result = "打开录音设备失败"; break; } } 接口定义 -------- 账号管理 ~~~~~~~~ 登录 ^^^^ - 方法签名 .. code:: c# public int Login(string account, string password, int role) - 参数描述 +------------+-----------------------------------+------------------+ | 参数 | 描述 | 备注 | +============+===================================+==================+ | account | 用户名 | | +------------+-----------------------------------+------------------+ | password | 明文密码 | | +------------+-----------------------------------+------------------+ | role | 用户角色,0:对讲用户;3:调度员 | 调度台请使用 3 | +------------+-----------------------------------+------------------+ - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 - ``onOnlineStatusChanged`` ,当用户登录成功后触发,\ ``OnlineStatus`` 状态改为 ``ONLINE_STATUS_ONLINE`` 参考 `通知事件 - 登录状态改变通知 <#loginStatus>`__ - ``OnError``\ ,当用户登录失败时触发。参考 `配置及加载 - 初始化 <#init>`__ - 示例 .. code:: c# // 创建用户管理对象 var accountManager = EChat.Net.EChatApi.Instance.AccountManager; accountManager.onOnlineStatusChanged += accountManager_onOnlineStatusChanged; accountManager.Login("13800000009", "1", 3); /// /// 用户登录成功的通知 /// /// /// 用户在线枚举 []() /// private void accountManager_onOnlineStatusChanged(OnlineStatus status){ if(status == Net.OnlineStatus.ONLINE_STATUS_ONLINE) { //登录成功 } } 注销 ^^^^ - 方法签名 .. code:: c# public void Logout(); - 参数 无 - 返回值 无 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; accountManager.Logout(); 账号信息查询 ^^^^^^^^^^^^ 获取用户信息 '''''''''''' - 方法签名 .. code:: c# public User GetCurrentUser() - 参数 无 - 返回值 用户实体类 User 参考 `实体类定义 -> 用户实体类 <#user>`__ - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var user = accountManager.GetCurrentUser(); ​ 获取在线状态 '''''''''''' - 方法签名 .. code:: c# public OnlineStatus GetOnlineStatus(); - 参数 无 - 返回值 返回在线状态的枚举,参考: `常用枚举 -> 用户在线 <#onlineStatus>`__ - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var status = accountManager.GetOnlineStatus(); 获取当前账号UID ''''''''''''''' - 方法签名 .. code:: c# public int GetUid(); - 参数 无 - 返回值 返回当前登录用户的UID - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var uid = accountManager.GetUid(); 获取用户名 '''''''''' - 方法签名 .. code:: c# public string GetName(); - 参数 无 - 返回值 返回当前登录用户的中文名 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var name = accountManager.GetName(); 是否被禁言状 '''''''''''' - 方法签名 .. code:: c# public bool HasAudioEnabled(); - 参数 无 - 返回值 布尔类型, true:正常发言 ,false:被禁言。 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var hasAudioEnabled = accountManager.HasAudioEnabled(); 更改账号信息 ^^^^^^^^^^^^ 修改用户名 '''''''''' - 方法签名 .. code:: c# public int ChangeName(string name); - 参数 +--------+--------------+--------+ | 参数 | 描述 | 备注 | +========+==============+========+ | name | 新用户名称 | | +--------+--------------+--------+ - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 ``onChangeNameResult`` 修改用户名触发此事件,事件处理是否修改成功。 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var ret = accountManager.ChangeName("张三"); _accountManager.onChangeNameResult += _accountManager_onChangeNameResult; private void _accountManager_onChangeNameResult(bool success) { if(success){ // 修改成功 }else{ // 修改失败 } } ​ 修改密码 '''''''' - 方法签名 .. code:: c# public int ChangePassword(string oldpassword, string newpassword); - 参数 +---------------+----------+--------+ | 参数 | 描述 | 备注 | +===============+==========+========+ | oldpassword | 旧密码 | | +---------------+----------+--------+ | newpassword | 新密码 | | +---------------+----------+--------+ - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 ``onChangePasswordResult`` , 修改密码触发此事件,事件处理是否修改成功 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var ret = accountManager.ChangePassword("123456","qwe"); _accountManager.onChangePasswordResult += _accountManager_onChangePasswordResult; private void _accountManager_onChangePasswordResult(bool success) { if(success){ // 修改成功 }else{ // 修改失败 } } 本地账号存储 ^^^^^^^^^^^^ 保存账号 '''''''' - 方法签名 .. code:: c# public int SaveAccount(Account account); - 参数 传入账号实体类, 请参考 `实体类定义 -> 账号实体类 <#account>`__ 定义。 - 返回值 成功标示 0:成功 ,-1:失败 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var account = new Account(Config.Account, Config.Password, 0, 0, 0); var ret = accountManager.SaveAccount(account); if(ret == 0){ // 成功 }else if(ret == -1){ // 失败 } ​ 清空已保存账号 '''''''''''''' - 方法签名 .. code:: c# public int ClearAccount(); - 参数 无 - 返回值 成功标示 0:成功 ,-1:失败 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var ret = accountManager.ClearAccount(); if(ret == 0){ // 成功 }else if(ret == -1){ // 失败 } 是否已保存账号 '''''''''''''' - 方法签名 .. code:: c# public bool HasAccount(); - 参数 无 - 返回值 成功标示 true:有 ,false:无 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var ret = accountManager.HasAccount(); if(ret){ // 存在 }else if(ret == -1){ // 不存在 } 获取已保存的账号 '''''''''''''''' - 方法签名 .. code:: c# public Account GetSavedAccount(); - 参数 无 - 返回值 返回账号实体类,请参考 `实体类定义 -> 账号实体类 <#account>`__ 定义。 - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; var account = accountManager.GetSavedAccount(); if(account !=null){ // todo } ​ 使用已存储的账号登录 '''''''''''''''''''' - 方法签名 .. code:: c# public int LoginWithSaved(); - 参数 无 - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 - ``onOnlineStatusChanged`` ,当用户登录成功后触发,\ ``OnlineStatus`` 状态改为 ``ONLINE_STATUS_ONLINE`` 参考 `通知事件 - 登录状态改变通知 <#loginStatus>`__ - ``OnError``\ ,当用户登录失败时触发。参考 `配置及加载 - 初始化 <#init>`__ - 示例 .. code:: c# var accountManager = EChat.Net.EChatApi.Instance.AccountManager; accountManager.LoginWithSaved(); /// /// 用户登录成功的通知 /// /// /// 用户在线枚举 /// private void accountManager_onOnlineStatusChanged(OnlineStatus status){ if(status == Net.OnlineStatus.ONLINE_STATUS_ONLINE) { //登录成功 } } 通知事件 ^^^^^^^^ 登录状态改变通知 '''''''''''''''' - 事件定义 .. code:: c# // 事件 public event win_pfn_notify_online_status onOnlineStatusChanged; ​ - 示例 .. code:: c# // 注册事件 _accountManager.onOnlineStatusChanged += _accountManager_onOnlineStatusChanged; /// /// 用户登录成功的通知 /// /// /// 用户在线枚举 []() /// private void _accountManager_onOnlineStatusChanged(OnlineStatus status){ if(status == Net.OnlineStatus.ONLINE_STATUS_ONLINE) { //登录成功 } } 参考: `常用枚举 -> 在线状态 <#onlineStatus>`__ 修改用户通知 '''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_change_name onChangeNameResult; - 示例 .. code:: c# accountManager.onChangeNameResult += accountManager_onChangeNameResult; private void accountManager_onChangeNameResult(bool success) { if(success){ // 成功 } else { // 失败 } } ​ 修改密码通知 '''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_change_password onChangePasswordResult; ​ - 示例 .. code:: c# accountManager.onChangePasswordResult += _accountManager_onChangePasswordResult; private void accountManager_onChangePasswordResult(bool success) { if(success){ // 成功 } else { // 失败 } } 当前用户遥开遥闭状态通知 '''''''''''''''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_audio_enable onAudioEnableChanged; ​ - 示例 .. code:: c# accountManager.onAudioEnableChanged += _accountManager_onAudioEnableChanged; private void _accountManager_onAudioEnableChanged(bool audioEnable) { if(audioEnable){ // 遥开 }else{ // 遥闭 } } 注册监听用户状态变化 '''''''''''''''''''' - 被动触发条件 echat 服务内部 User 缓存变更时触发,例如用户状态改变或用户名改变。 - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; groupManager.onUserChanged += _groupManager_onUserChanged; void groupManager_onUserChanged(int count, Net.User[] users) { Console.WriteLine("有{0}个用户状态更新了,我是否需要?",count) } 群组 ~~~~ 加入群组 ^^^^^^^^ - 方法签名 .. code:: c# public int JoinGroup(int gid); - 参数 +--------+----------+--------+ | 参数 | 描述 | 备注 | +========+==========+========+ | gid | 群组Id | | +--------+----------+--------+ - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 见 `通知事件 <#groupEvent>`__ - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; int result = groupManager.JoinGroup(gid); if( result == 0){ // 执行成功,当前群组切换通知 } ​ 离开群组 ^^^^^^^^ - 方法签名 .. code:: c# public int LeaveGroup(); - 参数 无 - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 见 `通知事件 <#groupEvent>`__ - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; int result = groupManager.LeaveGroup(); if( result == 0){ // 执行成功,当前群组切换通知 } 创建临时群组 ^^^^^^^^^^^^ - 方法签名 .. code:: c# public int Call(long[] uids); - 参数 +--------+----------------+--------+ | 参数 | 描述 | 备注 | +========+================+========+ | uids | 用户uid 数组 | | +--------+----------------+--------+ - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 见 `通知事件 <#groupEvent>`__ - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; int[] uids = new[] { 1,2 }; groupManager.call(uids); 销毁临时群组 ^^^^^^^^^^^^ 临时群组创建者退出临时群组即为销毁临时群组。 群组信息查询 ^^^^^^^^^^^^ 获取群组列表 '''''''''''' - 方法签名 .. code:: c# public Group[] GetGroupList(); - 参数 无 - 返回值 `Group 实体数组 <#group>`__ - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; var groups = groupManager.GetGroupList(); ​ 根据GID 查询群组信息 '''''''''''''''''''' - 方法签名 .. code:: c# public Group GetGroupByGid(int gid); - 参数 +--------+----------+--------+ | 参数 | 描述 | 备注 | +========+==========+========+ | gid | 群组Id | | +--------+----------+--------+ - 返回值 群组实体 - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; var group = groupManager.GetGroupByGid(1); 获取当前群组所在Id '''''''''''''''''' - 方法签名 .. code:: c# public int GetCurrentGroup(); - 参数 无 - 返回值 当前群组 Id - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; var gid = groupManager.GetCurrentGroup(); ​ 获取成员列表 '''''''''''' - 方法签名 .. code:: c# public Member[] GetMemberList(int gid) - 参数 +--------+----------+--------+ | 参数 | 描述 | 备注 | +========+==========+========+ | gid | 群组Id | | +--------+----------+--------+ - 返回值 见 `成员实体 <#member>`__ 群组设置 ^^^^^^^^ 监听群组 '''''''' - 方法签名 .. code:: c# public int StartWatchGroup(int gid); - 参数 +--------+----------+--------+ | 参数 | 描述 | 备注 | +========+==========+========+ | gid | 群组Id | | +--------+----------+--------+ - 返回值 成功标示 0:成功 ,-1:失败 - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; var return = groupManager.StopWatchGroup(1); if(return == 0){ // TODO 成功监听 } ​ ​ 取消监听群组 '''''''''''' - 方法签名 .. code:: c# public Group StopWatchGroup(int gid); - 参数 +--------+----------+--------+ | 参数 | 描述 | 备注 | +========+==========+========+ | gid | 群组Id | | +--------+----------+--------+ - 返回值 见 `群组实体 <#group>`__ - 示例 .. code:: c# var groupManager = EChat.Net.EChatApi.Instance.GroupManager; var group = groupManager.StopWatchGroup(1); if(group !=null){ Console.WriteLine(" gid :{0}",group.gid); } ​ #### .. raw:: html
.. raw:: html
通知事件 群组变化事件 '''''''''''' **被动触发** - 其他成员进入所在的组时 - 其他成员在自身所在的组下线时 - 切换群组时 **主动触发** - 进组 - 创建临时组 .. code:: c# //当前所在群组变化通知 //public event win_pfn_notify_current_group onCurrentGroup; //群组列表发生变化通知 //public event win_pfn_notify_grouplist onGroupList; //群组成员发生变化通知 //public event win_pfn_notify_members_changed onMemberChanged; //成员列表获取完毕 //public event win_pfn_notify_memberlist onMemberList; var groupManager = EChat.Net.EChatApi.Instance.GroupManager; groupManager.onGroupList += groupManager_onGroupList; groupManager.onCurrentGroup += groupManager_onCurrentGroup; groupManager.onMemberChanged += groupManager_onMemberChanged; groupManager.onMemberList += groupManager_onMemberList; void groupManager_onCurrentGroup(int gid, string group_name) { // 更新当前成员列表 } void groupManager_onGroupList() { // 刷新群组列表 } void groupManager_onMemberChanged(int gid, int[] us, int uc, int[] rs, int rc, int[] js, int jc, int[] ls, int lc) { //增量更新成员列表 // us 新加入当前群组人员id, 调度台强拆动作 // rs 退出当前群组人员id, 调度台强拉动作 // js 进入当前群组人员 id // ls 离开当前群组人员id } void groupManager_onMemberList(int gid) { //更新成员列表 } 对讲 ~~~~ 抢麦 - 获取话权 ^^^^^^^^^^^^^^^ - 方法签名 .. code:: c# public int StartSpeak(); - 参数 无 - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 见 `抢麦通知 <#startSpeak>`__ - 示例 .. code:: c# var talkManager = EChatApi.GetInstance().TalkManager; talkManager.onStartSpeak += _talkManager_onStartSpeak; talkManger.StartSpeak(); private void _talkManager_onStartSpeak(int gid, string group_name) { //TODO 抢到麦权 } ​ 放麦 - 释放话权 ^^^^^^^^^^^^^^^ - 方法签名 .. code:: c# public int StopSpeak(); - 参数 无 - 返回值 执行成功标示 0:成功 ,-1:失败 - 通知事件 `放麦通知 <#stopSpaek>`__ - 示例 .. code:: c# var talkManager = EChatApi.GetInstance().TalkManager; talkManager.onStopSpeak += _talkManager_onStopSpeak; talkManger.StopSpeak(); private void _talkManager_onStopSpeak(int gid, string group_name) { //TODO 释放麦权 } 对讲信息查询 ^^^^^^^^^^^^ 查询当前播放语音的用户 '''''''''''''''''''''' - 方法签名 .. code:: c# public User GetPlayingSoundUser(); - 参数 无 - 返回值 见 `用户实体 <#user>`__ ​ 查询当前所有再讲话的用户 ^^^^^^^^^^^^^^^^^^^^^^^^ - 方法签名 .. code:: c# public User[] GetSpeakingUsers(); - 参数 无 - 返回值 见 `用户实体数组 <#user>`__ - 示例 自己当前是否正在讲话 ^^^^^^^^^^^^^^^^^^^^ - 方法签名 .. code:: c# public bool IsSpeaking(); - 参数 无 - 返回值 成功标示 true:在说话 ,false:没有说话 ​ 自己当前是否正收听语音 ^^^^^^^^^^^^^^^^^^^^^^ - 方法签名 .. code:: c# public bool IsListening(); - 参数 无 - 返回值 成功标示 true:在说话 ,false:没有说话 通知事件 ^^^^^^^^ ##### .. raw:: html
.. raw:: html
抢麦通知 - 事件定义 .. code:: c# public event win_pfn_notify_start_speak onStartSpeak; ​ ##### .. raw:: html
.. raw:: html
放麦通知 - 事件定义 .. code:: c# public event win_pfn_notify_start_speak onStartSpeak; ​ - 示例 有人讲话通知 '''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_start_playing_sound onStartPlaying; - 示例 .. code:: c# var talkManager = EChatApi.GetInstance().TalkManager; talkManager.onStartPlaying += talkManager_onStartPlaying; private void _talkManager_onStartPlaying(int uid, string name, int gid, string group_name) { // TODO 其他人讲话 } ​ 讲话停止通知 '''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_user_stop_speak onUserStopSpeak; - 示例 .. code:: c# var talkManager = EChatApi.GetInstance().TalkManager; talkManager.onStopPlaying += talkManager_onStopPlaying; private void talkManager_onStopPlaying(int uid, string name, int gid, string group_name) { // TODO 其他人停止讲话 } 广播 ~~~~ 文字广播 ^^^^^^^^ 发送文字广播 '''''''''''' - 方法签名 .. code:: c# public int SendTextBroadcast(string text, int[] uids) - 参数描述 +------------+------------------------+-------------------------------+ | 参数定义 | 描述 | 约束 | +============+========================+===============================+ | text | 文字信息 | 文字长度1-40;编码格式uft-8 | +------------+------------------------+-------------------------------+ | uids | 收听广播的用户ID集合 | - - | +------------+------------------------+-------------------------------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; var uids = new[] { 50711 }; _broadcastManager.SendTextBroadcast("测试文字广播", uids) 语音广播 ^^^^^^^^ 开始录制音频文件 '''''''''''''''' - 方法签名 .. code:: c# public int StartRecordBroadcastAudio() - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; _broadcastManager.StartRecordBroadcastAudio() 停止录制音频文件 '''''''''''''''' - 方法签名 .. code:: c# public int StopRecordBroadcastAudio() - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; _broadcastManager.StopRecordBroadcastAudio() 发送语音广播 '''''''''''' - 方法签名 .. code:: c# public int SendAudioBroadcast(int[] uids) - 参数描述 +------------+------------------------+--------+ | 参数定义 | 描述 | 约束 | +============+========================+========+ | uids | 收听广播的用户ID集合 | - - | +------------+------------------------+--------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; var uids = new[] { 50711 }; _broadcastManager.SendAudioBroadcast(uids); 播放已录制的待播放音频文件 '''''''''''''''''''''''''' - 方法签名 .. code:: c# public int PlayRecordBroadcastAudio() - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; _broadcastManager.PlayRecordBroadcastAudio() 事件定义 ^^^^^^^^ 录音结束回调 '''''''''''' - 主动触发条件 执行 PlayRecordBroadcastAudio 方法 - 事件定义 .. code:: c# public event win_pfn_broadcast_play_async_stop OnPlayStop; - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; _broadcastManager.OnPlayStop += _broadcastManager_OnPlayStop; private void _broadcastManager_OnPlayStop() { } 发送广播结果回调 '''''''''''''''' - 主动触发条件 执行 SendAudioBroadcast 方法 执行SendTextBroadcast方法 - 事件定义 .. code:: c# public event win_pfn_notify_send_callback onSended; - 示例 .. code:: c# var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager; _broadcastManager.onSended += _broadcastManager_onSended; private void _broadcastManager_onSended(bool success) { //发送成功 } 调度 ~~~~ 临时加入组 ^^^^^^^^^^ - 方法签名 .. code:: c# public int TempJoinGroup(int gid, int[] uids) - 参数描述 +------------+--------------------+--------+ | 参数定义 | 描述 | 约束 | +============+====================+========+ | gid | 临时加入群组编号 | -- | +------------+--------------------+--------+ | uids | 用户ID集合 | -- | +------------+--------------------+--------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; var uids = new[] { 50711 }; _dispatchManager.TempJoinGroup(600612, uids); 临时移出组 ^^^^^^^^^^ - 方法签名 .. code:: c# public int TempLeaveGroup(int gid, int[] uids) - 参数描述 +------------+--------------+-----------+ | 参数定义 | 描述 | 约束 | +============+==============+===========+ | gid | 群组Id | 赋值为0 | +------------+--------------+-----------+ | uids | 用户ID集合 | -- | +------------+--------------+-----------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; var uids = new[] { 50711 }; _dispatchManager.TempLeaveGroup(0, uids); ​ 遥开遥闭 ^^^^^^^^ - 方法签名 .. code:: c# public int Audioenable(int[] uids, bool audioenabled) - 参数描述 +----------------+------------------------+--------+ | 参数定义 | 描述 | 约束 | +================+========================+========+ | uids | 用户ID集合 | -- | +----------------+------------------------+--------+ | audioenabled | true:开启 false:关闭 | -- | +----------------+------------------------+--------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; var uids = new[] { 50711 }; _dispatchManager.Audioenable(uids, true) 强拉 ^^^^ - 方法签名 在群组列表中把在线不在本群组内的人员强拉回调度员所在群组 .. code:: c# public int ForceDispatch(int[] uids) - 参数描述 +------------+--------------+--------+ | 参数定义 | 描述 | 约束 | +============+==============+========+ | uids | 用户ID集合 | -- | +------------+--------------+--------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; var uids = new[] { 50711 }; _dispatchManager.ForceDispatch(uids); ​ 强拆 ^^^^ - 方法签名 在群组列表中把正在讲话的用户强拆,强制中断其语音 .. code:: c# public int Takemic(int[] uids) - 参数描述 +------------+--------------+--------+ | 参数定义 | 描述 | 约束 | +============+==============+========+ | uids | 用户ID集合 | -- | +------------+--------------+--------+ - 返回值 执行成功标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; var uids = new[] { 50711 }; _dispatchManager.Takemic(uids) ​ 事件定义 ^^^^^^^^ 强拉结果通知事件 '''''''''''''''' - 主动触发条件 执行ForceDispatch 方法 - 事件定义 .. code:: c# public event win_pfn_notify_dispatcher onDispatched; - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; _dispatchManager.onDispatched += _dispatchManager_onDispatched; private void _dispatchManager_onDispatched(bool success, bool has_gid, int gid, int[] uids, int uid_size) { //success:是否成功 //has_gid:是否有群组变化 //gid:群组编号 //uids:用户Id集合 //uid_size:用户Id的数量 } 强拆结果通知事件 '''''''''''''''' - 主动触发条件 执行 Takemic 方法 - 事件定义 .. code:: c# public event win_pfn_notify_takemic onTakeMic; - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; _dispatchManager.onTakeMic += _dispatchManager_onTakeMic; public delegate void win_pfn_notify_takemic(bool success, int[] uids, int uids_size) { // success 是否成功 // uids 用户Id集合 //user_size 用户Id数量 } 遥开遥闭结果通知事件 '''''''''''''''''''' - 主动触发条件 执行 Audioenable方法 - 事件定义 .. code:: c# public event win_pfn_audio_enabled_callback onAudioEnabled; - 示例 .. code:: c# var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager; _dispatchManager.onAudioEnabled += _dispatchManager_onAudioEnabled; public delegate void win_pfn_audio_enabled_callback(bool success, bool audio_enabled, int[] uids, int size) { //success 是否成功 //audio_enabled 遥开遥闭状态 //uids 用户Id集合 //size 用户Id数量 } 本地录音 ~~~~~~~~ 设置本地录音 ^^^^^^^^^^^^ - 方法签名 .. code:: c# public int EnableLocalRecord(bool enable, string pathDir) - 参数描述 +------------+---------------------------+--------+ | 参数定义 | 描述 | 约束 | +============+===========================+========+ | enable | true:开启; false:关闭 | -- | +------------+---------------------------+--------+ | pathDir | 本地录音文件保存的路径 | -- | +------------+---------------------------+--------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _recordManager = EChat.Net.EChatApi.Instance.RecordManager; _recordManager.EnableLocalRecord(true,"d:\"); 播放本地录音 ^^^^^^^^^^^^ - 方法签名 .. code:: c# public int PlayLocalRecord(string path) - 参数描述 +------------+------------------+------------------------+ | 参数定义 | 描述 | 约束 | +============+==================+========================+ | path | 文件的绝对路径 | 播放的文件格式为evrc | +------------+------------------+------------------------+ - 返回值 执行标示:0【成功】 -1【失败】 - 示例 .. code:: c# var _recordManager = EChat.Net.EChatApi.Instance.RecordManager; _recordManager.PlayLocalRecord("D:\2018_1_18_13_45_4_996_600901_50711.evrc") ​ 事件定义 ^^^^^^^^ 开始录音的通知事件 '''''''''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_start_recordfile onStartRecord; - 示例 .. code:: c# var _recordManager = EChat.Net.EChatApi.Instance.RecordManager; _recordManager.onStartRecord += _recordManager_onStartRecord; public delegate void win_pfn_notify_start_recordfile(int gid, int uid, string starttime, string filename) { //gid 群组Id //uid 用户Id //starttime 开始时间(绝对时间) //filename 文件名称 //存储当前讲话者的基本信息 Dictionary ops = new Dictionary(); ops.Add("speakername", dispatchManager.GetUser(uid).name); ops.Add("groupname", groupManager.GetGroupByGid(gid).name); ops.Add("gid", gid); ops.Add("uid", uid); ops.Add("starttime", starttime); ops.Add("filename", filename); MimiCache.LOCAL_RECORDS.Add(filename, ops); } 结束录音的通知事件 '''''''''''''''''' - 事件定义 .. code:: c# public event win_pfn_notify_end_recordfile onStopRecord; - 示例 .. code:: c# var _recordManager = EChat.Net.EChatApi.Instance.RecordManager; _recordManager.onStopRecord += _recordManager_onStopRecord; private void _recordManager_onStopRecord(bool success, int gid, int uid, string finishtime, string filename) { //success 是否成功 //git 群组ID //uid 用户ID //finishtime 结束时间(绝对时间) //文件名称 //将录音成功的基本信息存储到队列中 } 数据结构定义 ------------ 账号信息 ~~~~~~~~ .. code:: c# public struct Account { /// /// 登录名 /// public string Name /// /// 密码 /// public string Password /// /// 用户角色 /// 0:对讲用户 3:调度员 /// public int Role /// /// 是否自动登录 /// public int IsAutoLogin /// /// 是否记住密码 /// public int IsRemembered } 群组信息 ~~~~~~~~ .. code:: c# public struct Group { /// /// 群组类型:1为普通组,2为临时组,3为紧急组 /// public int type; /// /// 群组编号 /// public UInt32 gid; /// /// 群组名称 /// public string name; /// /// 群组优先级 /// public int prior; /// /// 服务IP /// public UInt32 ip; /// /// 服务端口 /// public UInt16 port; } 用户信息 ~~~~~~~~ .. code:: c# public struct User { /// /// 所在群组的编号 /// public UInt32 gid; /// /// 用户编号 /// public UInt32 uid; /// /// 用户角色 0:对讲用户 3:调度员 /// public UInt32 role; /// /// 在线状态 /// public int online; /// /// 是否有群组编号 /// public int has_gid; /// /// 是否有角色 /// public int has_role; /// /// 语音状态是否打开 /// public int audio_enabled; /// /// 成员名称 /// public string name; } 成员信息 ~~~~~~~~ .. code:: c# public struct Member { /// /// 所在群组的编号 /// public UInt32 gid; /// /// 用户编号 /// public UInt32 uid; /// /// 用户角色 /// public UInt32 role; /// /// 在线状态 /// public int online; /// /// 是否再组 /// public int ingroup; /// /// 是否有群组编号 /// public int has_gid; /// /// 是否有角色 /// public int has_role; /// /// 语音状态是否打开 /// public int audio_enabled; /// /// 成员名称 /// public string name; } 数据定义 -------- 登录错误码 ~~~~~~~~~~ :: -1:帐号密码错误 -2:帐号已欠费或已超出服务期 -3:帐号不存在 -4:无效的帐号登录权限 -10:帐号已在其他位置登录 -11:帐号登录超时 -20:网络连接失败 -21:网络正在重连 -30:加入群组失败 -31:加入群组请求超时 -40:当前有人正在讲话<服务器回馈> -41:短时间内不允许多次抢麦 -42:摇闭状态不允许抢麦 -43:内部会话状态错误<主动放麦后立马去抢麦> -44:抢麦时申请音频焦点失败 -45:已较低的优先级抢麦<出现在当时正在有人讲话,自身比讲话人优先级低时> -46:网络不稳定 -50:打开录音设备失败 接口调用返回值 ~~~~~~~~~~~~~~ :: -1:操作失败 0:操作成功 用户在线状态 ~~~~~~~~~~~~ .. code:: c# public enum OnlineStatus { /// /// 未知状态 /// ONLINE_STATUS_UNKNOWN = 0, /// /// 离线状态 /// ONLINE_STATUS_OFFLINE = 1, /// /// 登录中 /// ONLINE_STATUS_LOGINING = 2, /// /// 在线状态 /// ONLINE_STATUS_ONLINE = 3 }