



善理对讲SDK alpha documentation

### Navigation

* [善理对讲SDK alpha documentation](index.html#document-index) »

善理对讲SDK集成文档[¶](#sdk "Permalink to this headline")

=================================================

C Windows集成[¶](#c-windows "Permalink to this headline")

-------------------------------------------------------

### 1 概述[¶](#id1 "Permalink to this headline")

> 

> 本文档主要介绍Win-SDK

> 接口函数（API），主要针对FAE，测试人员和客户使用 。

### 2 功能性接口[¶](#id2 "Permalink to this headline")

#### 2.1 初始化接口[¶](#id3 "Permalink to this headline")

* 程序启动

```

接口：int echat_win_on_load(void *arg)

参数：arg 配置文件路径

返回：成功 0；失败 -1

注意：程序启动时调用此接口，如果调用了echat_win_on_unload， 想再次启动程序，必须调用echat_win_on_load

```

* 程序退出

```

接口：void echat_win_on_unload()

```

#### 2 .2 登录配置接口[¶](#id4 "Permalink to this headline")

* 登录

```

接口：int echat_win_login(const char* account, const char* password, int role)

参数：account  账号

  password 密码

  role  用户角色 普通用户 0 ； 调度员 2

返回：成功 0；失败 -1

```

* 使用配置文件中的账号信息登录

```

接口：int echat_win_loginWithSaved()

返回：成功 0；失败 -1

```

* 注销

```

接口：int echat_win_logout()

返回：0

```

* 配置文件是否存有账号配置

```

接口：boolean echat_win_hasAccount()

返回：有 True；无 False

```

* 从配置文件获取账号配置信息

```

接口：int echat_win_getSavedAccount(char*account,const char* password,int*role)

参数：account  用于保存账号（必须分配内存）

  password  用于保存密码（必须分配内存）

  role  用于保存角色（必须分配内存）

返回：成功 0；失败 -1

```

* 保存账号配置

```

接口：int echat_win_saveAccount(const char* account, const char* password, int role)

参数：account  账号

  password 密码

  role  用户角色 普通用户 0 ； 调度员 2

返回：成功 0；失败 -1

```

* 清空账号配置

```

接口：int echat_win_clearAccount()

返回：0

```

* 获取登录状态

```

接口：ECHAT_ONLINE_STATUS echat_win_getOnlineStatus()

返回：未知 0；不在线 1；登录中  2；在线  3

```

#### 2.3 对讲接口[¶](#id5 "Permalink to this headline")

* 开始讲话

```

接口：int echat_win_startSpeak()

返回：成功 0；失败 -1

```

* 停止讲话

```

接口：int echat_win_stopSpeak()

返回：成功 0；失败 -1

```

* 获取当前用户的讲话状态

```

接口：boolean echat_win_isSpeaking()

返回：正在讲话 True；其它 False

```

* 是否有人在讲话

```

接口：boolean echat_win_isListening()

返回：有人讲话 True；其它 False

```

* 获取正在播放声音的人的user信息

```

接口：int echat_win_getPlayingSoundUser(win_user_t* user)

参数：user  用于存放用户信息（必须分配内存）

返回：成功 0；失败 -1

```

* 获取正在讲话的人的个数

```

接口：size_t echat_win_getSpeakingUsersSize()

返回：正在讲话人的个数

注意：监听时使用

```

* 获取正在讲话的人的user信息

```

接口：int echat_win_getSpeakingUsers(win_user_t* user, size_t size)

参数：user  用于存放用户信息（必须分配内存）

  size  用户个数

返回：成功  0；失败 -1；参数错误 -3

注意：监听时使用

```

#### 2.4 群组操作接口[¶](#id6 "Permalink to this headline")

* 加入群组

```

接口：int echat_win_joinGroup( gid_t gid)

参数：gid  群组ID

返回：成功 0；失败 -1

```

* 离开当前群组

```

接口：int echat_win_leaveGroup()

返回：成功 0；失败 -1

```

* 获取当前群组ID

```

接口：gid_t echat_win_getCurrentGroup()

返回：成功 群组ID；失败 0

```

* 获取群组的个数

```

接口：size_t echat_win_getGroupSize()

返回：群组个数

```

* 获取群组列表

```

接口：int  echat_win_getGroupList(win_group_t* group,size_t size)

参数：group  用于存放群组数据（必须分配内存）

  size  群组的个数

返回：成功  获取群组的个数；错误  -1；内存不足  -2；参数错误  -3

```

* 通过群组ID获取群组信息

```

接口：int echat_win_getGroupByGid(win_group_t* group, gid_t gid)

参数：group  用于存放群组信息（必须分配内存）

  gid  群组ID

返回：成功 0；失败 -1

```

* 建立临时群组

```

接口：int echat_win_Call(const uid_t* uids,size_t size)

参数：uids  用户ID列表

  size  用户ID个数

返回：成功 0；失败 -1

```

#### 2.5 用户操作接口[¶](#id7 "Permalink to this headline")

* 修改用户名

```

接口：int echat_win_changeName(const char* name)

参数：name  新用户名

返回：成功 0；失败 -1

```

* 修改密码

```

接口：int echat_win_changePassword(const char* oldpassword,const char* newpassword)

参数：oldpassword  旧密码

  newpassword  新密码

返回：成功 0；失败 -1

```

* 获取当前用户ID

```

接口：uid_t echat_win_getUid()

返回：成功 用户ID；失败 0

```

* 获取当前用户名

```

接口：int echat_win_getName(char* name)

参数：name  用于存放用户名（必须分配内存）

返回：0

```

* 查询用户是否被遥闭

```

接口：boolean echat_win_hasAudioEnabled()

返回：遥开 True；遥闭 False

```

* 通过群组ID获取群组成员个数

```

接口：size_t echat_win_getMemberSize(gid_t gid)

参数：gid  群组ID

返回：成员个数； 参数错误 -2

```

* 获取群组成员列表

```

接口：int echat_win_getMemberList(win_member_t* member, size_t size, gid_t gid)

参数：member  用于存放成员数据（必须分配内存）

  size  成员的个数

  gid  群组ID

返回：成功  获取成员的个数；错误  -1；内存不足  -2；参数错误  -3

```

* 通过用户ID获取用户信息

```

接口：int echat_win_getUser(win_user_t* user,uid_t uid)

参数：user  用于存放用户信息（必须分配内存）

  uid  用户ID

返回：成功 获取的用户信息个数；失败 -1；参数错误  -2

```

* 通过用户ID列表获取多个用户信息

```

接口：int echat_win_getUsers(win_user_t* user, uid_t* uids, size_t size)

参数：user  用于存放用户信息（必须分配内存）

  uids  用户ID列表

  size  用户个数

返回：成功 获取的用户信息个数；失败 -1；参数错误  -2

```

* 获取所有用户个数

```

接口：int echat_win_getAllUserSize()

返回：用户个数

```

* 获取所有用户ID

```

接口：int echat_win_getAllUsersId(uid_t* uids, size_t size)

参数：uids  用于存放用户ID列表（必须分配内存）

  size  用户个数

返回：成功  获取的用户信息个数；失败 -1；参数错误 -2

```

* 获取当前用户信息

```

接口：int echat_win_getCurrentUser(win_user_t* user)

参数：user  用于存放用户列表信息（必须分配内存）

返回：成功 0；失败 -1

```

#### 2.6 监听接口[¶](#id8 "Permalink to this headline")

* 开始监听某个群组

```

接口：int echat_win_startWatchGroup(gid_t gid)

参数：gid  群组ID

返回：成功 0；失败 -1

```

* 停止监听某个群组

```

接口：int echat_win_stopWatchGroup(gid_t gid)

参数：gid  群组ID

返回：成功 0；失败 -1

```

* 获取已监听群组信息

```

接口：int echat_win_getWatchGroups(win_group_t*watch_groups,size_t size)

参数：watch_groups  存放监听群组的信息（必须分配内存）

  size  群组个数

返回：成功  0；失败 -1；参数错误 -3

```

#### 2.7 广播操作接口[¶](#id9 "Permalink to this headline")

* 发送文字广播

```

接口：int echat_win_broadcast_send_text(char* text,uid_t* uids,size_t size)

参数：text  文字字符串

  uids  发给用户的ID列表

  size  用户个数

返回：成功 0；失败 -1

```

* 录制待广播的语音数据

```

接口：int echat_win_broadcast_start_record()

返回：成功 0；失败 -1

```

* 停止录制待广播的语音数据

```

接口：int echat_win_broadcast_stop_record()

返回：成功 0；失败 -1

```

* 播放已录制的待播放语音数据

```

接口：int echat_win_broadcast_play_recordaudio(win_pfn_broadcast_play_async_stop pfn)

参数：pfn  发送已录制的语音广播数据

返回：成功 0；失败 -1

```

* 发送已录制的语音广播数据

```

接口：int echat_win_broadcast_send_recordaudio(uid_t* uids,size_t size)

参数：uids  发给用户的ID列表

  size  用户个数

返回：成功 0；失败 -1

```

#### 2.8 调度操作接口[¶](#id10 "Permalink to this headline")

* 临时加入组

```

接口：int echat_win_schedule_temp_join_group(gid_t gid, uid_t* uids,size_t size)

参数：gid  要加入的群组ID

  uids  用户ID列表

  size  用户个数

返回：成功 0；失败 -1

```

* 临时移除组

```

接口：int echat_win_schedule_temp_leave_group(gid_t gid, uid_t* uids,size_t size)

参数：gid  要加入群组ID（为0表示移出组）

  uids  用户ID列表

  size  用户个数

返回：成功 0；失败 -1

```

* 遥开摇闭

```

接口：int echat_win_schedule_audioenable(uid_t* uids,size_t size, boolean audioenabled)

参数：uids  用户ID列表

  size  用户个数

  audioenabled  遥开 True  摇闭  False

返回：成功 0；失败 -1

```

* 强拉,拉到调度员所在的群组

```

接口：int echat_win_schedule_force_dispatch(uid_t* uids,size_t size)

参数：uids  用户ID列表

  size  用户个数

返回：成功 0；失败 -1

```

* 强拆

```

接口：int echat_win_schedule_takemic(uid_t* uids,size_t size)

参数：uids  用户ID列表

  size  用户个数

返回：成功 0；失败 -1

```

* 开启/关闭定位

```

接口：int echat_win_schedule_switch_location(uid_t* uids, size_t size, boolean enable, uint32_t period)

参数：auids  用户ID列表

  size  用户个数

  enable  打开 True  关闭  False

  period  上报速度 （30~300s）

返回：成功 0；失败 -1

```

#### 2.9 本地录音操作接口[¶](#id11 "Permalink to this headline")

* 本地录音开关

```

接口：int echat_win_record_set_enabled(boolean record_enabled,char* pathDir)

参数：record_enabled  打开 True   关闭 False

  pathDir  保存路径，例如：“D:/record_file”

返回：成功 0；失败 -1

注意：录音时自动保存在该路径，生成文件名是：时间+GID+UID.evrc

```

* 本地录音播放

```

接口：int echat_win_record_play_audio(char* path)

参数：path  路径及文件名，例如：“D:/record_file/时间+GID+UID.evrc”

返回：成功 0；失败 -1

注意：播放已录音的文件，需要路径及文件名

```

### 3 消息通知回调接口[¶](#id12 "Permalink to this headline")

* 设置在线状态回调

```

接口：int echat_win_set_online_status_cb(win_pfn_notify_online_status cb)

参数：cb 在线状态变化时通知函数

返回：成功 0；失败 -1

注意：当前用户上线或下线时触发通知在线状态

```

* 设置消息通知回调

```

接口：int echat_win_set_message_cb(win_pfn_notify_message cb)

参数：cb 对外通知消息函数

返回：成功 0；失败 -1

注意：暂不可用

```

* 设置错误消息回调

```

接口：int echat_win_set_error_cb(win_pfn_notify_error cb)

参数：cb错误消息通知函数

返回：成功 0；失败 -1

注意：有操作错误或异常错误触发通知错误信息（见 3 错误信息标识）

```

* 设置遥开摇闭通知回调

```

接口：int echat_win_set_audio_enabled_cb(win_pfn_notify_audio_enable cb)

参数：cb被遥开、摇闭时回调函数

返回：成功 0；失败 -1

注意：当被遥开或摇闭时触发，通知当前状态

```

* 设置修改用户名回调

```

接口：int echat_win_set_change_name_cb(win_pfn_notify_change_name cb)

参数：cb  用户名修改通知函数

返回：成功 0；失败 -1

注意：主动修改用户名时触发，通知结果

```

* 设置修改密码回调

```

接口：int echat_win_set_change_password_cb(win_pfn_notify_change_password cb)

参数：cb密码修改通知函数

返回：成功 0；失败 -1

注意：主动修改用户密码时触发，通知结果

```

* 设置用户列表回调

```

接口：int echat_win_set_memberlist_cb(win_pfn_notify_memberlist cb)

参数：cb 通知用户列表函数

返回：成功 0；失败 -1

注意：请求用户信息时，用户信息从服务器返回后触发，通知用户信息已更新

```

* 设置成员改变回调

```

接口：int echat_win_set_member_changed_cb(win_pfn_notify_members_changed cb)

参数：cb 成员改变时通知函数

返回：成功 0；失败 -1

注意：当有成员信息改变时，通知改变结果（进组、离组等）

```

* 设置用户角色改变回调

```

接口：int echat_win_set_roles_changed_cb(win_pfn_notify_members_changed cb)

参数：cb  用户角色改变时通知函数

返回：成功 0；失败 -1

注意：暂不可用

```

* 设置群组列表回调

```

接口：echat_win_set_grouplist_cb(win_pfn_notify_grouplist cb)

参数：cb 通知群组列表时函数

返回：成功 0；失败 -1

注意：主动请求群组或群组改变时触发，通知群组列表信息（群组改变：进入群组、调度当前群组、群组列表改变时）

```

* 设置用户开始讲话回调

```

接口：int echat_win_set_user_start_speak_cb(win_pfn_notify_user_start_speak cb)

参数：cb 用户开始讲话时通知函数

返回：成功 0；失败 -1

注意：其它成员开始讲话时触发，通知群组ID和讲话人ID

```

* 设置用户停止讲话回调

```

接口：int echat_win_set_user_stop_speak_cb(win_pfn_notify_user_stop_speak cb)

参数：cb 用户停止讲话时通知函数

返回：成功 0；失败 -1

注意：其它成员结束讲话时触发，通知群组ID和讲话人ID

```

* 设置开始讲话回调

```

接口：int echat_win_set_start_speak_cb(win_pfn_notify_start_speak cb)

参数：cb 开始讲话时通知函数

返回：成功 0；失败 -1

注意：自己开始讲话时触发，通知（0,0）

```

* 设置停止讲话回调

```

接口：int echat_win_set_stop_speak_cb(win_pfn_notify_stop_speak cb)

参数：cb 停止讲话时通知函数

返回：成功 0；失败 -1

注意：自己结束讲话时触发，结束讲话包含：主动结束（通知0，0）、被摘MIC和获取MIC失败（通知群组ID和当前用户ID）等

```

* 设置当前群组回调

```

接口：int echat_win_set_current_group_cb(win_pfn_notify_current_group cb)

参数：cb 当前群组通知函数

返回：成功 0；失败 -1

注意：当前群组变化时触发，当前群组变化包含：进组失败（通知0，0）、主动进组和调度进组（通知当前群组ID和0）

```

* 设置用户改变回调

```

接口：int echat_win_set_users_changed_cb(win_pfn_notify_users_changed cb)

参数：cb 用户信息改变时通知函数

返回：成功 0；失败 -1

注意：当用户信息改变时触发，通知用户的信息，包含：用户角色、上下线、遥开摇闭、定位信息等

```

* 设置监听群组回调

```

接口：int echat_win_set_watchgrouplist_cb(win_pfn_notify_watchgrouplist cb)

参数：cb 监听群组时通知函数

返回：成功 0；失败 -1

注意：当设置了监听群组时触发，登录时有默认监听群组或配置监听群组

```

* 设置开始播放回调

```

接口：int echat_win_set_start_playing_cb(win_pfn_notify_start_playing_sound cb)

参数：cb 开始播放时通知函数

返回：成功 0；失败 -1

注意：其它成员开始讲话，自己开始播放音频时触发，通知群组ID和讲话人ID

```

* 设置停止播放回调

```

接口：int echat_win_set_stop_playing_cb(win_pfn_notify_stop_playing_sound cb)

参数：cb 停止播放时通知函数

返回：成功 0；失败 -1

注意：当其它成员结束讲话，自己停止播放音频时触发，通知群组ID和讲话人ID

```

* 设置调度回调

```

接口：int echat_win_set_dispatcher_cb(win_pfn_notify_dispatcher cb)

参数：cb 调度时通知函数

返回：成功 0；失败 -1

注意：当有调度（强拉/临时加入组/移除组）时触发，通知被调度的群组ID、用户ID列表

```

* 设置强拆回调

```

接口：int echat_win_set_take_mic_cb(win_pfn_notify_takemic cb)

参数：cb 调度员拆掉用户MIC通知函数

返回：成功 0；失败 -1

注意：暂不可用

```

* 设置开始录音回调

```

接口：int echat_win_set_start_record_cb(win_pfn_notify_start_recordfile cb)

参数：cb 获取MCI通知函数

返回：成功 0；失败 -1

注意：开始录音时触发，通知群组ID、讲话人ID和录音参数（文件名、当前时间、状态（成功/失败））

```

* 设置录音结束回调

```

接口：int echat_win_set_finish_record_cb(win_pfn_notify_end_recordfile cb)

参数：cb 录音结束通知函数

返回：成功 0；失败 -1

注意：有停止录音时触发，通知群组ID、讲话人ID和录音参数（文件名、当前时间、状态（成功/失败））

```

* 设置发送录音回调

```

接口：int echat_win_set_send_cb(win_pfn_notify_send_callback cb)

参数：cb 发送通知函数

返回：成功 0；失败 -1

注意：发送录音，服务器返回时触发，通知发送结果（成功  True；失败  False）

```

* 设置播放录音文件结束回调

```

接口：int echat_win_set_play_recordfile_end_cb(win_pfn_notify_play_recordfile_end cb)

参数：cb 播放录音文件结束通知函数

返回：成功 0；失败 -1

注意：本地录音结束时触发，通知

```

* 设置遥开摇闭回调

```

接口：int echat_win_set_audio_enabledcall_cb(win_pfn_audio_enabled_callback cb)

参数：cb 管理员设置用户的遥开摇闭时的通知函数

返回：成功 0；失败 -1

注意：管理员设置用户的遥开摇闭服务器返回时触发，通知结果（成功  True；失败  False）、状态（遥开 1；摇闭 0）、被摇闭的用户ID列表

```

* 设置定位开启关闭回调

```

接口：int echat_win_set_switch_location_cb(win_pfn_switch_location cb)

参数：cb 管理员设置用户定位时的通知函数

返回：成功 0；失败 -1

注意：管理员设置用户定位服务器返回时触发，通知结果（成功  True；失败  False）、状态（开启 1；关闭 0）、被打开的用户ID列表

```

* 设置多媒体消息回调

```

接口：int echat_win_setmultimedia_message_cb(win_pfn_multimedia_message cb)

参数：cb 收到多媒体消息的通知函数

返回：成功 0；失败 -1

注意：当服务器推送多媒体消息时触发，通知收到的消息

```

### 4 错误信息标识[¶](#id13 "Permalink to this headline")

```

ECHAT\_ERR\_ACCOUNT\_ERROR             -1      //帐号密码错误

ECHAT\_ERR\_ACCOUNT\_OUTSERVICE        -2      //帐号已欠费或已超出服务期

ECHAT\_ERR\_ACCOUNT\_NOEXIST           -3      //帐号不存在

ECHAT\_ERR\_INVALID\_LOGIN\_PRIVILEGE   -4      //无效的帐号登录权限

ECHAT\_ERR\_ACCOUNT\_NOCONFIG          -5      //没有配置帐号信息

ECHAT\_ERR\_KICKOUT                   -10     //帐号已在其他位置登录

ECHAT\_ERR\_LOGIN\_TIMEOUT             -11     //帐号登录超时

ECHAT\_ERR\_LOGOUT                    -12     //帐号已注销

ECHAT\_ERR\_NETWORK\_DISCONNECT        -20     //网络连接失败

ECHAT\_ERR\_NETWORK\_RECONECTING       -21     //网络正在重连

ECHAT\_ERR\_CANNOT\_CONNECT            -22     //无法连接服务器

ECHAT\_ERR\_NETWORK\_CONECTING         -23     //正在连接服务器

ECHAT\_ERR\_JOIN\_GROUP\_FAILED         -30     //加入群组失败

ECHAT\_ERR\_JOIN\_GROUP\_TIMEOUT        -31     //加入群组请求超时

ECHAT\_ERR\_REQMIC\_REFUSED            -40     //抢麦被拒绝

ECHAT\_ERR\_REQMIC\_REPEATEDLY         -41     //短暂时间内多次抢麦,不允许

ECHAT\_ERR\_REQMIC\_IN\_AUDIOENABLE     -42     //遥闭状态抢麦,不允许

ECHAT\_ERR\_REQMIC\_IN\_ERR\_SSTATE      -43     //内部会话状态错误

ECHAT\_ERR\_REQMIC\_NO\_AUDIOFOCUS      -44     //抢麦时申请音频焦点失败

ECHAT\_ERR\_REQMIC\_IN\_LOW\_ROLE        -45     //以较低的角色值抢麦

ECHAT\_ERR\_REQMIC\_TIMEOUT            -46     //接收抢麦回应超时

ECHAT\_ERR\_RECORD\_DEVICE             -50     //打开录音设备失败

```

### 5 常用枚举定义[¶](#id14 "Permalink to this headline")

### 6 结构类型定义[¶](#id15 "Permalink to this headline")

C# Windows集成[¶](#id1 "Permalink to this headline")

--------------------------------------------------

### 概述[¶](#id1 "Permalink to this headline")

此 C# SDK 适用于.net framework>2.0版本，基于 善理公版引擎 C++ API 构建。

#### 安装[¶](#id2 "Permalink to this headline")

* 引用`ShanliTech.EChat.SDK.DLL` 到项目中。

[\*\*](#id3)注意：SDK分为32位和64位，请根据引入的SDK设置为 `平台目标` \*\*

![微信图片\_20180124184017](D:\微信图片_20180124184017.png)

微信图片\_20180124184017

##### 文件目录[¶](#id5 "Permalink to this headline")

```

|-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

```

##### 依赖库文件[¶](#id6 "Permalink to this headline")

* 从文件夹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

##### 其他[¶](#id7 "Permalink to this headline")

C# SDK引用了第三方的开源项目

NAudio,因此，您需要在项目中引用它(可以使用NuGet管理dll)

#### 初始化[¶](#id8 "Permalink to this headline")

##### 初始化配置[¶](#id9 "Permalink to this headline")

* 传参返回值采用UTF-8编码

* `Context` 和 `Dns` 配置，修改echat.ini文件：

```

[account]

context = dev

[network]

dns = <语音服务IP:端口>

```

##### 初始化DLL加载[¶](#dll "Permalink to this headline")

```

// 启动必须先完成初始化的工作，否则开发包无法正常运行

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;

            }

        }

```

### 接口定义[¶](#id10 "Permalink to this headline")

#### 账号管理[¶](#id11 "Permalink to this headline")

##### 登录[¶](#id12 "Permalink to this headline")

* 方法签名

```

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)

* 示例

```

// 创建用户管理对象

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

accountManager.onOnlineStatusChanged += accountManager\_onOnlineStatusChanged;

accountManager.Login("13800000009", "1", 3);

/// <summary>

///  用户登录成功的通知

/// </summary>

/// <param name="status">

/// 用户在线枚举 []()

/// </param>

private void accountManager\_onOnlineStatusChanged(OnlineStatus status){

  if(status == Net.OnlineStatus.ONLINE\_STATUS\_ONLINE)

  {

      //登录成功

  }

}

```

##### 注销[¶](#id13 "Permalink to this headline")

* 方法签名

```

public void Logout();

```

* 参数

无

* 返回值

无

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

accountManager.Logout();

```

##### 账号信息查询[¶](#id14 "Permalink to this headline")

###### 获取用户信息[¶](#id15 "Permalink to this headline")

* 方法签名

```

public User GetCurrentUser()

```

* 参数

无

* 返回值

用户实体类 User 参考 [实体类定义 -> 用户实体类](#user)

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var user = accountManager.GetCurrentUser();

```

​

###### 获取在线状态[¶](#id16 "Permalink to this headline")

* 方法签名

```

public OnlineStatus GetOnlineStatus();

```

* 参数

无

* 返回值

返回在线状态的枚举，参考： [常用枚举 -> 用户在线](#onlineStatus)

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var status = accountManager.GetOnlineStatus();

```

###### 获取当前账号UID[¶](#uid "Permalink to this headline")

* 方法签名

```

public int GetUid();

```

* 参数

无

* 返回值

返回当前登录用户的UID

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var uid = accountManager.GetUid();

```

###### 获取用户名[¶](#id17 "Permalink to this headline")

* 方法签名

```

public string GetName();

```

* 参数

无

* 返回值

返回当前登录用户的中文名

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var name = accountManager.GetName();

```

###### 是否被禁言状[¶](#id18 "Permalink to this headline")

* 方法签名

```

public bool HasAudioEnabled();

```

* 参数

无

* 返回值

布尔类型， true：正常发言 ，false：被禁言。

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var hasAudioEnabled = accountManager.HasAudioEnabled();

```

##### 更改账号信息[¶](#id19 "Permalink to this headline")

###### 修改用户名[¶](#id20 "Permalink to this headline")

* 方法签名

```

public int ChangeName(string name);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| name | 新用户名称 |  |

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

`onChangeNameResult` 修改用户名触发此事件，事件处理是否修改成功。

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var ret = accountManager.ChangeName("张三");

\_accountManager.onChangeNameResult += \_accountManager\_onChangeNameResult;

private void \_accountManager\_onChangeNameResult(bool success)

{

  if(success){

    // 修改成功

  }else{

    // 修改失败

  }

}

```

​

###### 修改密码[¶](#id21 "Permalink to this headline")

* 方法签名

```

public int ChangePassword(string oldpassword, string newpassword);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| oldpassword | 旧密码 |  |

| newpassword | 新密码 |  |

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

`onChangePasswordResult` , 修改密码触发此事件，事件处理是否修改成功

* 示例

```

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{

    // 修改失败

  }

}

```

##### 本地账号存储[¶](#id22 "Permalink to this headline")

###### 保存账号[¶](#id23 "Permalink to this headline")

* 方法签名

```

public int SaveAccount(Account account);

```

* 参数

传入账号实体类， 请参考 [实体类定义 -> 账号实体类](#account) 定义。

* 返回值

成功标示 0：成功 ，-1：失败

* 示例

```

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){

  // 失败

}

```

​

###### 清空已保存账号[¶](#id24 "Permalink to this headline")

* 方法签名

```

public int ClearAccount();

```

* 参数

无

* 返回值

成功标示 0：成功 ，-1：失败

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var ret = accountManager.ClearAccount();

if(ret == 0){

  // 成功

}else if(ret == -1){

  // 失败

}

```

###### 是否已保存账号[¶](#id25 "Permalink to this headline")

* 方法签名

```

public bool HasAccount();

```

* 参数

无

* 返回值

成功标示 true：有 ，false：无

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var ret = accountManager.HasAccount();

if(ret){

  // 存在

}else if(ret == -1){

  // 不存在

}

```

###### 获取已保存的账号[¶](#id26 "Permalink to this headline")

* 方法签名

```

public Account GetSavedAccount();

```

* 参数

无

* 返回值

返回账号实体类，请参考 [实体类定义 -> 账号实体类](#account) 定义。

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

var account = accountManager.GetSavedAccount();

if(account !=null){

  // todo

}

```

​

###### 使用已存储的账号登录[¶](#id27 "Permalink to this headline")

* 方法签名

```

public  int  LoginWithSaved();

```

* 参数

无

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

* `onOnlineStatusChanged` ，当用户登录成功后触发，`OnlineStatus`

状态改为 `ONLINE\_STATUS\_ONLINE` 参考 [通知事件 -

登录状态改变通知](#loginStatus)

* `OnError`，当用户登录失败时触发。参考 [配置及加载 -

初始化](#init)

* 示例

```

var accountManager = EChat.Net.EChatApi.Instance.AccountManager;

accountManager.LoginWithSaved();

/// <summary>

///  用户登录成功的通知

/// </summary>

/// <param name="status">

/// 用户在线枚举

/// </param>

private void accountManager\_onOnlineStatusChanged(OnlineStatus status){

  if(status == Net.OnlineStatus.ONLINE\_STATUS\_ONLINE)

  {

      //登录成功

  }

}

```

##### 通知事件[¶](#id28 "Permalink to this headline")

###### 登录状态改变通知[¶](#id29 "Permalink to this headline")

* 事件定义

```

// 事件

public event win\_pfn\_notify\_online\_status onOnlineStatusChanged;

```

​

* 示例

```

// 注册事件

\_accountManager.onOnlineStatusChanged += \_accountManager\_onOnlineStatusChanged;

/// <summary>

///  用户登录成功的通知

/// </summary>

/// <param name="status">

/// 用户在线枚举 []()

/// </param>

private void \_accountManager\_onOnlineStatusChanged(OnlineStatus status){

  if(status == Net.OnlineStatus.ONLINE\_STATUS\_ONLINE)

  {

      //登录成功

  }

}

```

参考： [常用枚举 -> 在线状态](#onlineStatus)

###### 修改用户通知[¶](#id30 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_change\_name onChangeNameResult;

```

* 示例

```

accountManager.onChangeNameResult += accountManager\_onChangeNameResult;

private void accountManager\_onChangeNameResult(bool success)

{

    if(success){

      // 成功

    } else {

      // 失败

    }

}

```

​

###### 修改密码通知[¶](#id31 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_change\_password onChangePasswordResult;

```

​

* 示例

```

accountManager.onChangePasswordResult += \_accountManager\_onChangePasswordResult;

private void accountManager\_onChangePasswordResult(bool success)

{

    if(success){

      // 成功

    } else {

      // 失败

    }

}

```

###### 当前用户遥开遥闭状态通知[¶](#id32 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_audio\_enable onAudioEnableChanged;

```

​

* 示例

```

 accountManager.onAudioEnableChanged += \_accountManager\_onAudioEnableChanged;

private void \_accountManager\_onAudioEnableChanged(bool audioEnable)

{

  if(audioEnable){

    // 遥开

  }else{

    // 遥闭

  }

}

```

###### 注册监听用户状态变化[¶](#id33 "Permalink to this headline")

* 被动触发条件 echat 服务内部 User

缓存变更时触发，例如用户状态改变或用户名改变。

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

groupManager.onUserChanged += \_groupManager\_onUserChanged;

void groupManager\_onUserChanged(int count, Net.User[] users)

{

   Console.WriteLine("有{0}个用户状态更新了，我是否需要？",count)

}

```

#### 群组[¶](#id34 "Permalink to this headline")

##### 加入群组[¶](#id35 "Permalink to this headline")

* 方法签名

```

public int JoinGroup(int gid);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| gid | 群组Id |  |

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

见 [通知事件](#groupEvent)

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

int result = groupManager.JoinGroup(gid);

if( result == 0){

  // 执行成功，当前群组切换通知

}

```

​

##### 离开群组[¶](#id36 "Permalink to this headline")

* 方法签名

```

public int LeaveGroup();

```

* 参数

无

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

见 [通知事件](#groupEvent)

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

int result = groupManager.LeaveGroup();

if( result == 0){

  // 执行成功，当前群组切换通知

}

```

##### 创建临时群组[¶](#id37 "Permalink to this headline")

* 方法签名

```

public int Call(long[] uids)；

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| uids | 用户uid 数组 |  |

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

见 [通知事件](#groupEvent)

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

int[] uids = new[] { 1,2 };

groupManager.call(uids);

```

##### 销毁临时群组[¶](#id38 "Permalink to this headline")

临时群组创建者退出临时群组即为销毁临时群组。

##### 群组信息查询[¶](#id39 "Permalink to this headline")

###### 获取群组列表[¶](#id40 "Permalink to this headline")

* 方法签名

```

public Group[] GetGroupList();

```

* 参数

无

* 返回值

[Group 实体数组](#group)

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

var groups = groupManager.GetGroupList();

```

​

###### 根据GID 查询群组信息[¶](#gid "Permalink to this headline")

* 方法签名

```

public Group GetGroupByGid(int gid);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| gid | 群组Id |  |

* 返回值

群组实体

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

var group = groupManager.GetGroupByGid(1);

```

###### 获取当前群组所在Id[¶](#id "Permalink to this headline")

* 方法签名

```

public int GetCurrentGroup();

```

* 参数

无

* 返回值

当前群组 Id

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

var gid = groupManager.GetCurrentGroup();

```

​

###### 获取成员列表[¶](#id41 "Permalink to this headline")

* 方法签名

```

public Member[] GetMemberList(int gid)

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| gid | 群组Id |  |

* 返回值

见 [成员实体](#member)

##### 群组设置[¶](#id42 "Permalink to this headline")

###### 监听群组[¶](#id43 "Permalink to this headline")

* 方法签名

```

public int StartWatchGroup(int gid);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| gid | 群组Id |  |

* 返回值

成功标示 0：成功 ，-1：失败

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

var return  = groupManager.StopWatchGroup(1);

if(return == 0){

    // TODO 成功监听

}

```

​

​

###### 取消监听群组[¶](#id44 "Permalink to this headline")

* 方法签名

```

public Group StopWatchGroup(int gid);

```

* 参数

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| gid | 群组Id |  |

* 返回值

见 [群组实体](#group)

* 示例

```

var groupManager = EChat.Net.EChatApi.Instance.GroupManager;

var group = groupManager.StopWatchGroup(1);

if(group !=null){

    Console.WriteLine(" gid ：{0}",group.gid);

}

```

​

---

通知事件

###### 群组变化事件[¶](#id45 "Permalink to this headline")

**被动触发**

* 其他成员进入所在的组时

* 其他成员在自身所在的组下线时

* 切换群组时

**主动触发**

* 进组

* 创建临时组

```

//当前所在群组变化通知

//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)

{

 //更新成员列表

}

```

#### 对讲[¶](#id46 "Permalink to this headline")

##### 抢麦 - 获取话权[¶](#id47 "Permalink to this headline")

* 方法签名

```

public int StartSpeak();

```

* 参数

无

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

见 [抢麦通知](#startSpeak)

* 示例

```

var talkManager = EChatApi.GetInstance().TalkManager;

talkManager.onStartSpeak += \_talkManager\_onStartSpeak;

talkManger.StartSpeak();

private void \_talkManager\_onStartSpeak(int gid, string group\_name)

{

    //TODO 抢到麦权

}

```

​

##### 放麦 - 释放话权[¶](#id48 "Permalink to this headline")

* 方法签名

```

public int StopSpeak()；

```

* 参数

无

* 返回值

执行成功标示 0：成功 ，-1：失败

* 通知事件

[放麦通知](#stopSpaek)

* 示例

```

var talkManager = EChatApi.GetInstance().TalkManager;

talkManager.onStopSpeak += \_talkManager\_onStopSpeak;

talkManger.StopSpeak();

private void \_talkManager\_onStopSpeak(int gid, string group\_name)

{

    //TODO 释放麦权

}

```

##### 对讲信息查询[¶](#id49 "Permalink to this headline")

###### 查询当前播放语音的用户[¶](#id50 "Permalink to this headline")

* 方法签名

```

public User GetPlayingSoundUser()；

```

* 参数

无

* 返回值

见 [用户实体](#user)

​

##### 查询当前所有再讲话的用户[¶](#id51 "Permalink to this headline")

* 方法签名

```

public User[] GetSpeakingUsers();

```

* 参数

无

* 返回值

见 [用户实体数组](#user)

* 示例

##### 自己当前是否正在讲话[¶](#id52 "Permalink to this headline")

* 方法签名

```

public bool IsSpeaking();

```

* 参数

无

* 返回值

成功标示 true：在说话 ，false：没有说话

​

##### 自己当前是否正收听语音[¶](#id53 "Permalink to this headline")

* 方法签名

```

public bool IsListening();

```

* 参数

无

* 返回值

成功标示 true：在说话 ，false：没有说话

##### 通知事件[¶](#id54 "Permalink to this headline")

---

抢麦通知

* 事件定义

```

public event win\_pfn\_notify\_start\_speak onStartSpeak;

```

​

---

放麦通知

* 事件定义

```

public event win\_pfn\_notify\_start\_speak onStartSpeak;

```

​

* 示例

###### 有人讲话通知[¶](#id55 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_start\_playing\_sound onStartPlaying;

```

* 示例

```

var talkManager = EChatApi.GetInstance().TalkManager;

talkManager.onStartPlaying += talkManager\_onStartPlaying;

private void \_talkManager\_onStartPlaying(int uid, string name, int gid, string group\_name)

{

    // TODO 其他人讲话

}

```

​

###### 讲话停止通知[¶](#id56 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_user\_stop\_speak onUserStopSpeak;

```

* 示例

```

var talkManager = EChatApi.GetInstance().TalkManager;

talkManager.onStopPlaying += talkManager\_onStopPlaying;

private void talkManager\_onStopPlaying(int uid, string name, int gid, string group\_name)

{

   // TODO 其他人停止讲话

}

```

#### 广播[¶](#id57 "Permalink to this headline")

##### 文字广播[¶](#id58 "Permalink to this headline")

###### 发送文字广播[¶](#id59 "Permalink to this headline")

* 方法签名

```

public int SendTextBroadcast(string text, int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| text | 文字信息 | 文字长度1-40；编码格式uft-8 |

| uids | 收听广播的用户ID集合 | * +

 |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

var uids = new[] { 50711 };

\_broadcastManager.SendTextBroadcast("测试文字广播",  uids)

```

##### 语音广播[¶](#id60 "Permalink to this headline")

###### 开始录制音频文件[¶](#id61 "Permalink to this headline")

* 方法签名

```

public int StartRecordBroadcastAudio()

```

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

 var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

\_broadcastManager.StartRecordBroadcastAudio()

```

###### 停止录制音频文件[¶](#id62 "Permalink to this headline")

* 方法签名

```

public int StopRecordBroadcastAudio()

```

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

 var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

\_broadcastManager.StopRecordBroadcastAudio()

```

###### 发送语音广播[¶](#id63 "Permalink to this headline")

* 方法签名

```

public int SendAudioBroadcast(int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| uids | 收听广播的用户ID集合 | * +

 |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

 var _broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

 var uids = new[] { 50711 };

_broadcastManager.SendAudioBroadcast(uids)；

```

###### 播放已录制的待播放音频文件[¶](#id64 "Permalink to this headline")

* 方法签名

```

public int PlayRecordBroadcastAudio()

```

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

\_broadcastManager.PlayRecordBroadcastAudio()

```

##### 事件定义[¶](#id65 "Permalink to this headline")

###### 录音结束回调[¶](#id66 "Permalink to this headline")

* 主动触发条件 执行 PlayRecordBroadcastAudio 方法

* 事件定义

```

public event win_pfn_broadcast_play_async_stop OnPlayStop；

```

* 示例

```

var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

\_broadcastManager.OnPlayStop += \_broadcastManager\_OnPlayStop;

private void \_broadcastManager\_OnPlayStop()

{

}

```

###### 发送广播结果回调[¶](#id67 "Permalink to this headline")

* 主动触发条件 执行 SendAudioBroadcast 方法

执行SendTextBroadcast方法

* 事件定义

```

public event win\_pfn\_notify\_send\_callback onSended;

```

* 示例

```

var \_broadcastManager = EChat.Net.EChatApi.Instance.BroadcastManager;

\_broadcastManager.onSended += \_broadcastManager\_onSended;

private void \_broadcastManager\_onSended(bool success)

{

   //发送成功

}

```

#### 调度[¶](#id68 "Permalink to this headline")

##### 临时加入组[¶](#id69 "Permalink to this headline")

* 方法签名

```

public int TempJoinGroup(int gid, int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| gid | 临时加入群组编号 | – |

| uids | 用户ID集合 | – |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager;

var uids = new[] { 50711 };

\_dispatchManager.TempJoinGroup(600612, uids);

```

##### 临时移出组[¶](#id70 "Permalink to this headline")

* 方法签名

```

public int TempLeaveGroup(int gid, int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| gid | 群组Id | 赋值为0 |

| uids | 用户ID集合 | – |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager;

var uids = new[] { 50711 };

\_dispatchManager.TempLeaveGroup(0, uids);

```

​

##### 遥开遥闭[¶](#id71 "Permalink to this headline")

* 方法签名

```

public int Audioenable(int[] uids, bool audioenabled)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| uids | 用户ID集合 | – |

| audioenabled | true:开启 false:关闭 | – |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager;

var uids = new[] { 50711 };

\_dispatchManager.Audioenable(uids, true)

```

##### 强拉[¶](#id72 "Permalink to this headline")

* 方法签名

在群组列表中把在线不在本群组内的人员强拉回调度员所在群组

```

public int ForceDispatch(int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| uids | 用户ID集合 | – |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var _dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager;

var uids = new[] { 50711 };

_dispatchManager.ForceDispatch(uids)；

```

​

##### 强拆[¶](#id73 "Permalink to this headline")

* 方法签名

在群组列表中把正在讲话的用户强拆，强制中断其语音

```

public int Takemic(int[] uids)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| uids | 用户ID集合 | – |

* 返回值 执行成功标示：0【成功】 -1【失败】

* 示例

```

var \_dispatchManager = EChat.Net.EChatApi.Instance.DispatchManager;

var uids = new[] { 50711 };

\_dispatchManager.Takemic(uids)

```

​

##### 事件定义[¶](#id74 "Permalink to this headline")

###### 强拉结果通知事件[¶](#id75 "Permalink to this headline")

* 主动触发条件 执行ForceDispatch 方法

* 事件定义

```

public event win\_pfn\_notify\_dispatcher onDispatched;

```

* 示例

```

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的数量

}

```

###### 强拆结果通知事件[¶](#id76 "Permalink to this headline")

* 主动触发条件 执行 Takemic 方法

* 事件定义

```

public event win\_pfn\_notify\_takemic onTakeMic;

```

* 示例

```

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数量

}

```

###### 遥开遥闭结果通知事件[¶](#id77 "Permalink to this headline")

* 主动触发条件 执行 Audioenable方法

* 事件定义

```

public event win\_pfn\_audio\_enabled\_callback onAudioEnabled;

```

* 示例

```

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数量

}

```

#### 本地录音[¶](#id78 "Permalink to this headline")

##### 设置本地录音[¶](#id79 "Permalink to this headline")

* 方法签名

```

public int EnableLocalRecord(bool enable, string pathDir)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| enable | true:开启； false：关闭 | – |

| pathDir | 本地录音文件保存的路径 | – |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_recordManager = EChat.Net.EChatApi.Instance.RecordManager;

\_recordManager.EnableLocalRecord(true,"d:\");

```

##### 播放本地录音[¶](#id80 "Permalink to this headline")

* 方法签名

```

public int PlayLocalRecord(string path)

```

* 参数描述

| 参数定义 | 描述 | 约束 |

| --- | --- | --- |

| path | 文件的绝对路径 | 播放的文件格式为evrc |

* 返回值 执行标示：0【成功】 -1【失败】

* 示例

```

var \_recordManager = EChat.Net.EChatApi.Instance.RecordManager;

\_recordManager.PlayLocalRecord("D:\2018\_1\_18\_13\_45\_4\_996\_600901\_50711.evrc")

```

​

##### 事件定义[¶](#id81 "Permalink to this headline")

###### 开始录音的通知事件[¶](#id82 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_start\_recordfile onStartRecord;

```

* 示例

```

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<string, object> ops = new Dictionary<string, object>();

  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);

}

```

###### 结束录音的通知事件[¶](#id83 "Permalink to this headline")

* 事件定义

```

public event win\_pfn\_notify\_end\_recordfile onStopRecord;

```

* 示例

```

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 结束时间（绝对时间）

  //文件名称

  //将录音成功的基本信息存储到队列中

}

```

### 数据结构定义[¶](#id84 "Permalink to this headline")

#### 账号信息[¶](#id85 "Permalink to this headline")

```

public struct Account

{

       /// <summary>

       /// 登录名

       /// </summary>

       public string Name

       /// <summary>

       /// 密码

       /// </summary>

       public string Password

       /// <summary>

       /// 用户角色

       /// 0：对讲用户 3：调度员

       /// </summary>

       public int Role

       /// <summary>

       /// 是否自动登录

       /// </summary>

       public int IsAutoLogin

       /// <summary>

       /// 是否记住密码

       /// </summary>

       public int IsRemembered

}

```

#### 群组信息[¶](#id86 "Permalink to this headline")

```

 public struct Group

   {

    /// <summary>

    /// 群组类型：1为普通组，2为临时组，3为紧急组

    /// </summary>

    public int type;

    /// <summary>

    /// 群组编号

    /// </summary>

    public UInt32 gid;

    /// <summary>

    /// 群组名称

    /// </summary>

    public string name;

    /// <summary>

    /// 群组优先级

    /// </summary>

    public int prior;

    /// <summary>

    /// 服务IP

    /// </summary>

    public UInt32 ip;

    /// <summary>

    /// 服务端口

    /// </summary>

    public UInt16 port;

}

```

#### 用户信息[¶](#id87 "Permalink to this headline")

```

public struct User

{

  /// <summary>

  /// 所在群组的编号

  /// </summary>

  public UInt32 gid;

  /// <summary>

  /// 用户编号

  /// </summary>

  public UInt32 uid;

  /// <summary>

  /// 用户角色 0：对讲用户 3：调度员

  /// </summary>

  public UInt32 role;

  /// <summary>

  /// 在线状态

  /// </summary>

  public int online;

  /// <summary>

  /// 是否有群组编号

  /// </summary>

  public int has_gid;

  /// <summary>

  /// 是否有角色

  /// </summary>

  public int has_role;

  /// <summary>

  /// 语音状态是否打开

  /// </summary>

  public int audio_enabled;

  /// <summary>

  /// 成员名称

  /// </summary>

  public string name;

}

```

#### 成员信息[¶](#id88 "Permalink to this headline")

```

public struct Member

{

    /// <summary>

    /// 所在群组的编号

    /// </summary>

    public UInt32 gid;

    /// <summary>

    /// 用户编号

    /// </summary>

    public UInt32 uid;

    /// <summary>

    /// 用户角色

    /// </summary>

    public UInt32 role;

    /// <summary>

    /// 在线状态

    /// </summary>

    public int online;

    /// <summary>

    /// 是否再组

    /// </summary>

    public int ingroup;

    /// <summary>

    /// 是否有群组编号

    /// </summary>

    public int has\_gid;

    /// <summary>

    /// 是否有角色

    /// </summary>

    public int has\_role;

    /// <summary>

    /// 语音状态是否打开

    /// </summary>

    public int audio\_enabled;

    /// <summary>

    /// 成员名称

    /// </summary>

    public string name;

}

```

### 数据定义[¶](#id89 "Permalink to this headline")

#### 登录错误码[¶](#id90 "Permalink to this headline")

```

-1：帐号密码错误

-2：帐号已欠费或已超出服务期

-3：帐号不存在

-4：无效的帐号登录权限

-10：帐号已在其他位置登录

-11：帐号登录超时

-20：网络连接失败

-21：网络正在重连

-30：加入群组失败

-31：加入群组请求超时

-40:当前有人正在讲话<服务器回馈>

-41：短时间内不允许多次抢麦

-42：摇闭状态不允许抢麦

-43：内部会话状态错误<主动放麦后立马去抢麦>

-44：抢麦时申请音频焦点失败

-45：已较低的优先级抢麦<出现在当时正在有人讲话，自身比讲话人优先级低时>

-46：网络不稳定

-50：打开录音设备失败

```

#### 接口调用返回值[¶](#id91 "Permalink to this headline")

```

-1：操作失败

 0：操作成功

```

#### 用户在线状态[¶](#id92 "Permalink to this headline")

```

public enum OnlineStatus

{

    /// <summary>

    /// 未知状态

    /// </summary>

    ONLINE\_STATUS\_UNKNOWN = 0,

    /// <summary>

    /// 离线状态

    /// </summary>

    ONLINE\_STATUS\_OFFLINE = 1,

    /// <summary>

    /// 登录中

    /// </summary>

    ONLINE\_STATUS\_LOGINING = 2,

    /// <summary>

    /// 在线状态

    /// </summary>

    ONLINE\_STATUS\_ONLINE = 3

}

```

C# Windows ActiveX集成[¶](#c-windows-activex "Permalink to this headline")

------------------------------------------------------------------------

### 安装[¶](#id1 "Permalink to this headline")

* 安装SetupEChatCom.msi

* 将ActiveX.cab文件放在Web的根目录下

​

### 初始化[¶](#id2 "Permalink to this headline")

#### 初始化配置[¶](#id3 "Permalink to this headline")

* 传参返回值采用UTF-8编码

* `Context` 和 `Dns`

配置，修改echat.ini文件（文件路径在桌面上面）：

```

[account]

context = dev

[network]

dns = <语音服务IP:端口>

```

### 示例[¶](#id4 "Permalink to this headline")

#### 登录示例[¶](#id5 "Permalink to this headline")

##### 加载ActiveX控件[¶](#activex "Permalink to this headline")

注意： clsid必须为117343BA-BEAF-485D-B80C-7B5BE7395697不能更改

```

<object id="myAcX" classid="clsid:117343BA-BEAF-485D-B80C-7B5BE7395697"

    codebase="ActiveX.cab#version=1,0,0,0">

</object>

```

##### 初始化EchatApi[¶](#echatapi "Permalink to this headline")

注意：actix.Init()只能初始化一次。

```

<script language="javascript" for="myAcX" type="text/javascript">

    window.actx = null

    window.myself;

    function start() {

        actx = document.getElementById("myAcX");

        if (actx != null) {

            //初始化EchatApi

            actx.Init();

            //登录方法

            actx.Login("13800000009", "1", 3);

        }

    }

    window.onload = start;

</script>

```

##### 登录成功事件[¶](#id6 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript"  event="onOnlineStatusChangedX(message)">

  if(message == 3){

     window.location.href = "WebForm2.aspx";

  }

</script>

```

##### 登录失败事件[¶](#id7 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onErrorX(messag,error)">

  //错误码可以查询  数据定义--登录错误码

  alert("onErrorX" + error);

</script>

```

#### 主页面示例[¶](#id8 "Permalink to this headline")

##### 加载ActiveX控件[¶](#id9 "Permalink to this headline")

注意： clsid必须为117343BA-BEAF-485D-B80C-7B5BE7395697不能更改

```

<object id="myAcX" classid="clsid:117343BA-BEAF-485D-B80C-7B5BE7395697"

       codebase="ActiveX.cab#version=1,0,0,0">

</object>

```

##### 初始化EchatApi中的事件[¶](#id10 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript">

    window.actx = null

    window.myself;

    function start() {

        actx = document.getElementById("myAcX");

        if (actx != null) {

            actx.Init2();

        }

    }

    window.onload = start;

</script>

```

### 接口定义[¶](#id11 "Permalink to this headline")

#### 账号管理[¶](#id12 "Permalink to this headline")

##### Login方法（String,String,Int)[¶](#login-string-string-int "Permalink to this headline")

调度员登录方法

###### 语法[¶](#id13 "Permalink to this headline")

```

public int Login(string account, string password, int role)

```

参数

account

​ Type:System.String

​ 登录账号

password

​ Type:System.String

​ 明文密码

role

​ Type:System.Int32

​ 用户角色，0:对讲用户；3：调度员

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 备注[¶](#id14 "Permalink to this headline")

参数role传固定值3

###### 通知事件[¶](#id15 "Permalink to this headline")

* onOnlineStatusChangedX，当用户登录成功后触发，`OnlineStatus` 为

`ONLINE\_STATUS\_ONLINE`

* `onErrorX`，当用户登录失败时触发。错误码参考： 错误码

###### 示例[¶](#id16 "Permalink to this headline")

```

<input id="Submit13" type="submit" value='登录' runat="server"  onclick="Login()" />

<script language="javascript" type="text/javascript">

//登录方法

function Login(){

  actx.Login("13800000009", "1", 3);

}

</script>

<script language="javascript" for="myAcX" type="text/javascript" event="onOnlineStatusChangedX(message)">

    alert("onOnlineStatusChangedX" + message);

    //message为3表示登录成功

    if (message == 3) {

        window.location.href = "WebForm2.aspx";

    }

</script>

<script language="javascript" for="myAcX" type="text/javascript" event="onErrorX(message,error)">

    alert("onErrorX" + message + error);

</script>

```

##### Logout方法()[¶](#logout "Permalink to this headline")

退出登录界面

###### 语法[¶](#id17 "Permalink to this headline")

```

public int Logout();

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id18 "Permalink to this headline")

```

<input id="Submit13" type="submit" value='退出' runat="server"  onclick="Logout()" />

<script language="javascript" type="text/javascript">

function Logout(){

  actx.Logout();

}

</script>

```

##### GetCurrentUser方法()[¶](#getcurrentuser "Permalink to this headline")

获取用户信息

###### 语法[¶](#id19 "Permalink to this headline")

```

public string GetCurrentUser()

```

返回值

Type: System.String

序列化的 JSON 字符串。

对象：用户实体类 User 参考 ：用户信息

###### 示例[¶](#id20 "Permalink to this headline")

代码示例

```

<input id="Submit37" type="submit" value='获取当前登录的账号信息' runat="server"  onclick="GetCurrentUser()" />

<script language="javascript" type="text/javascript">

function GetCurrentUser() {

        actx.GetCurrentUser();

  }

</script>

```

返回数据示例

```

{"gid":0,"uid":1,"role":3,"online":0,"has\_gid":0,"has\_role":1,"audio\_enabled":1,"name":"账号09"}

```

##### GetOnlineStatus方法()[¶](#getonlinestatus "Permalink to this headline")

获取当前用户在线状态

###### 语法[¶](#id21 "Permalink to this headline")

```

public OnlineStatus GetOnlineStatus();

```

返回值

Type：OnlineStatus

返回在线状态的枚举，参考： 用户在线状态

###### 示例[¶](#id22 "Permalink to this headline")

```

 <input id="Submit34" type="submit" value='获取在线状态' runat="server"  onclick="GetOnlineStatus()" />

<script language="javascript" type="text/javascript">

function GetOnlineStatus() {

     actx.GetOnlineStatus();

  }

</script>

```

##### GetUid方法()[¶](#getuid "Permalink to this headline")

获取当前账号UID

###### 语法[¶](#id23 "Permalink to this headline")

```

public int GetUid();

```

返回值

Type:System.Int32

返回当前登录用户的UID

​

###### 示例[¶](#id24 "Permalink to this headline")

```

<input id="Submit35" type="submit" value='获取账号ID' runat="server"  onclick="GetUid()" />

<script language="javascript" type="text/javascript">

function GetUid() {

   actx.GetUid();

 }

</script>

```

##### GetName方法()[¶](#getname "Permalink to this headline")

获取用户名

###### 语法[¶](#id25 "Permalink to this headline")

```

public string GetName();

```

返回值

Type:System.Sting

返回当前登录用户的中文名

###### 示例[¶](#id26 "Permalink to this headline")

```

<input id="Submit36" type="submit" value='获取中文名' runat="server"  onclick="GetName()" />

<script language="javascript" type="text/javascript">

function GetName() {

       actx.GetName();

 }

</script>

```

##### HasAudioEnabled方法()[¶](#hasaudioenabled "Permalink to this headline")

是否被禁言状态

###### 语法[¶](#id27 "Permalink to this headline")

```

public bool HasAudioEnabled();

```

返回值

Type：System.Boolean

true：正常发言 ，false：被禁言。

​

###### 示例[¶](#id28 "Permalink to this headline")

```

<input id="Submit36" type="submit" value='是否被禁言' runat="server"  onclick="HasAudioEnabled()" />

<script language="javascript" type="text/javascript">

function HasAudioEnabled() {

        actx.HasAudioEnabled();

    }

</script>

```

##### ChangeName方法 (string)[¶](#changename-string "Permalink to this headline")

修改用户名

###### 语法[¶](#id29 "Permalink to this headline")

```

public int ChangeName(string name);

```

参数

name

​ Type:System.String

​ 登录账号

​

| 参数 | 描述 | 备注 |

| --- | --- | --- |

| name | 新用户名称 |  |

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

​

###### 通知事件[¶](#id30 "Permalink to this headline")

* `onChangeNameResultX` 修改用户名触发此事件，事件处理是否修改成功。

###### 示例[¶](#id31 "Permalink to this headline")

```

<input id="Submit18" type="submit" value='修改用户名' runat="server"  onclick="ChangeName()" />

<script language="javascript" type="text/javascript">

function ChangeName() {

        actx.ChangeName("账号09");

    }

</script>

<script language="javascript" for="myAcX" type="text/javascript" event="onChangeNameResultX(success)">

if(success){

  //账号名称修改成功

  }else{

  //账号名称修改失败

  }

</script>

```

##### ChangePassword方法(String,String)[¶](#changepassword-string-string "Permalink to this headline")

修改密码

###### 语法[¶](#id32 "Permalink to this headline")

```

public int ChangePassword(string oldpassword, string newpassword);

```

参数

oldpassword

​ Type:System.String

​ 旧密码（明文）

newpassword

​ Type:System.String

​ 新密码（明文）

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id33 "Permalink to this headline")

* `onChangePasswordResultX` ,

修改密码触发此事件，事件处理是否修改成功

###### 示例[¶](#id34 "Permalink to this headline")

```

<input id="Submit19" type="submit" value='ChangePassword' runat="server"  onclick="ChangePassword()" />

<script language="javascript" type="text/javascript">

function ChangePassword() {

        actx.ChangePassword("2","1");

  }

</script>

<script language="javascript" for="myAcX" type="text/javascript" event="onChangePasswordResultX(success)">

   if(success){

  //账号密码修改成功

  }else{

  //账号密码修改失败

  }

</script>

```

##### SaveAccount方法(String)[¶](#saveaccount-string "Permalink to this headline")

保存账号

###### 语法[¶](#id35 "Permalink to this headline")

```

public int SaveAccount(string account);

```

参数

account

​ Type: System.String

​ 序列化的 JSON 字符串。

​ 对象：用户实体类 User 参考 用户信息

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id36 "Permalink to this headline")

```

<input id="Submit14" type="submit" value='保存账号' runat="server"  onclick="SaveAccount()" />

<script language="javascript" type="text/javascript">

function SaveAccount() {

        var obj = new Object();

        obj.Name = "13800000009";

        obj.Password = "1";

        obj.Role = 3;

        obj.IsRemembered = 0;

        obj.IsAutoLogin = 0;

        var jsonStr = JSON.stringify(obj);

        actx.SaveAccount(jsonStr);

    }

</script>

```

##### ClearAccount方法()[¶](#clearaccount "Permalink to this headline")

清空已保存账号

###### 语法[¶](#id37 "Permalink to this headline")

```

public int ClearAccount();

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id38 "Permalink to this headline")

```

<input id="Submit44" type="submit" value='ClearAccount' runat="server"  onclick="ClearAccount()" />

<script language="javascript" type="text/javascript">

function ClearAccount() {

        actx.ClearAccount();

    }

</script>

```

##### HasAccount方法()[¶](#hasaccount "Permalink to this headline")

是否已保存账号

###### 语法[¶](#id39 "Permalink to this headline")

```

public bool HasAccount();

```

返回值

Type：System.Boolean

true：有 ，false：无

###### 示例[¶](#id40 "Permalink to this headline")

```

<input id="Submit15" type="submit" value='HasAccount' runat="server"  onclick="HasAccount()" />

<script language="javascript" type="text/javascript">

function HasAccount() {

  var result = actx.HasAccount();

  if(result){

    //有保存的账号

  }else{

    //没有保存的账号

  }

}

</script>

```

##### GetSavedAccount方法()[¶](#getsavedaccount "Permalink to this headline")

获取已保存的账号

###### 语法[¶](#id41 "Permalink to this headline")

```

public string GetSavedAccount();

```

返回值

Type: System.String

序列化的 JSON 字符串。

对象：账号实体类 Account参考 账号信息

###### 示例[¶](#id42 "Permalink to this headline")

代码示例

```

<input id="Submit17" type="submit" value='获取已保存的账号' runat="server"  onclick="GetSavedAccount()" />

<script language="javascript" type="text/javascript">

function GetSavedAccount() {

        actx.GetSavedAccount();

    }

</script>

```

返回值示例

```

{"Name":"13800000009","Password":"1","Role":3,"IsRemembered":0,"IsAutoLogin"：0}

```

##### LoginWithSaved方法()[¶](#loginwithsaved "Permalink to this headline")

使用已存储的账号登录

###### 语法[¶](#id43 "Permalink to this headline")

```

public int LoginWithSaved();

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id44 "Permalink to this headline")

* `onOnlineStatusChangedX` ，当用户登录成功后触发，`OnlineStatus`

状态改为 `ONLINE\_STATUS\_ONLINE`

* `OnErrorX`，当用户登录失败时触发。

###### 示例[¶](#id45 "Permalink to this headline")

```

<input id="Submit16" type="submit" value='LoginWithSaved' runat="server"  onclick="LoginWithSaved()" />

<script language="javascript" type="text/javascript">

function LoginWithSaved() {

       actx.LoginWithSaved();

    }

</script>

```

##### onOnlineStatusChangedX事件[¶](#ononlinestatuschangedx "Permalink to this headline")

登录状态改变通知

###### 语法[¶](#id46 "Permalink to this headline")

```

void onOnlineStatusChangedX(object OnlineStatus);

```

参数

status

​ Type: System.Object 用户在线状态

​ OnlineStatus 参考： 用户在线状态

###### 示例[¶](#id47 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onOnlineStatusChangedX(message)">

    if (message == OnlineStatus.ONLINE\_STATUS\_ONLINE) {

        //此为用户在线状态

    }

</script>

```

##### onChangeNameResultX事件[¶](#onchangenameresultx "Permalink to this headline")

修改用户名称通知

###### 语法[¶](#id48 "Permalink to this headline")

```

void onChangeNameResultX(object success);

```

参数

success

​ Type: System.Object 修改名称结果

​ true：修改成功 false：修改失败

###### 示例[¶](#id49 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onChangeNameResultX(success)">

if(success){

  //账号名称修改成功

  }else{

  //账号名称修改失败

  }

</script>

```

##### onChangePasswordResultX事件[¶](#onchangepasswordresultx "Permalink to this headline")

修改密码通知

###### 语法[¶](#id50 "Permalink to this headline")

```

void onChangePasswordResultX(object success);

```

​ 参数

success

​ Type: System.Object 修改密码结果

​ true：修改成功 false：修改失败

###### 示例[¶](#id51 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onChangePasswordResultX(success)">

   if(success){

  //账号密码修改成功

  }else{

  //账号密码修改失败

  }

</script>

```

##### onAudioEnableChangedX事件[¶](#onaudioenablechangedx "Permalink to this headline")

当前用户遥开遥闭状态通知

###### 语法[¶](#id52 "Permalink to this headline")

```

void onAudioEnableChangedX(object audio\_enable);

```

参数

audio\_enable

​ Type: System.Object

​ true：遥开 false：遥闭

###### 示例[¶](#id53 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onAudioEnableChangedX(audio\_enable)">

  if(audio\_enable){

    //遥开

  }else{

    //遥闭

  }

</script>

```

##### onUserChangedX事件[¶](#onuserchangedx "Permalink to this headline")

注册监听用户状态变化

* 被动触发条件

echat 服务内部 User 缓存变更时触发，例如用户状态改变或用户名改变。

当前用户所在群组里的其他用户正在讲话时

###### 语法[¶](#id54 "Permalink to this headline")

```

void onUserChangedX(object count, object usersListjson);

```

参数

count

​ Type: System.Object 变化用户数

​ usersListjson：

​ Type：System.String

​ 序列化的 JSON 字符串。

​ 对象：用户实体类 User 参考 ：用户信息

​

###### 示例[¶](#id55 "Permalink to this headline")

代码示例

```

<script language="javascript" for="myAcX" type="text/javascript" event="onUserChangedX(count,usersListjson)">

</script>

```

返回数据示例

```

usersListjson数据：

[{"gid":600901,"uid":50711,"role":0,"online":1,"has_gid":1,"has_role":1,"audio_enable":1,"name":"账号01"}]

```

#### 群组[¶](#id56 "Permalink to this headline")

##### JoinGroup方法(Int)[¶](#joingroup-int "Permalink to this headline")

根据群组ID，进入到相应的群组里

###### 语法[¶](#id57 "Permalink to this headline")

```

public int JoinGroup(int gid);

```

参数

gid

​ Type:System.Int32

​ 群组ID

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id58 "Permalink to this headline")

见 通知事件

###### 示例[¶](#id59 "Permalink to this headline")

```

<input id="Submit22" type="submit" value='JoinGroup' runat="server"  onclick="JoinGroup()" />

<script language="javascript" type="text/javascript">

    function JoinGroup()

    {

        actx.JoinGroup(600901);

    }

</script>

```

##### LeaveGroup方法()[¶](#leavegroup "Permalink to this headline")

用户离开当前所在群组

###### 语法[¶](#id60 "Permalink to this headline")

```

public int LeaveGroup();

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id61 "Permalink to this headline")

见 通知事件

###### 示例[¶](#id62 "Permalink to this headline")

```

<input id="Submit23" type="submit" value='LeaveGroup' runat="server"  onclick="LeaveGroup()" />

<script language="javascript" type="text/javascript">

    function LeaveGroup() {

        actx.LeaveGroup();

    }

</script>

```

##### Call方法(Array)[¶](#call-array "Permalink to this headline")

创建临时群组

###### 语法[¶](#id63 "Permalink to this headline")

```

public int Call(Array uids)；

```

参数

uids

​ Type:System.Array

​ 一维Array，用户ID

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id64 "Permalink to this headline")

见 通知事件

###### 示例[¶](#id65 "Permalink to this headline")

```

<input id="Submit7" type="submit" value='Call' runat="server"  onclick="Call()" />

<script language="javascript" type="text/javascript">

  function Call() {

    var uids = new Array()

    uids[0] = 50720;

    uids[1] = 50720;

    actx.Call(uids);

    }

</script>

```

##### 销毁临时群组[¶](#id66 "Permalink to this headline")

临时群组创建者退出临时群组即为销毁临时群组。

##### GetGroupList方法()[¶](#getgrouplist "Permalink to this headline")

获取当前登录的调度员所在集团的所有群组列表

###### 语法[¶](#id67 "Permalink to this headline")

```

public string GetGroupList();

```

返回值

Type: System.String

序列化的 JSON 字符串。

对象：群组实体类 Group参考：群组信息

###### 示例[¶](#id68 "Permalink to this headline")

代码示例

```

<input id="Submit20" type="submit" value='GetGroupList' runat="server"  onclick="GetGroupList()" />

<script language="javascript" type="text/javascript">

   function GetGroupList() {

        actx.GetGroupList();

    }

</script>

```

返回值示例

##### GetGroupByGid方法(int )[¶](#getgroupbygid-int "Permalink to this headline")

根据GID 查询群组信息

###### 语法[¶](#id69 "Permalink to this headline")

```

public string GetGroupByGid(int gid);

```

参数

gid

​ Type:System.Int32

​ 群组ID

返回值

Type: System.String

序列化的 JSON 字符串。

对象：群组实体类 Group参考：群组信息

###### 示例[¶](#id70 "Permalink to this headline")

代码示例

```

 <input id="Submit20" type="submit" value='GetGroupByGid' runat="server"  onclick="GetGroupByGid()" />

<script language="javascript" type="text/javascript">

   function GetGroupByGid() {

       actx.GetGroupByGid(600901);

    }

</script>

```

返回值示例：

##### GetCurrentGroup()[¶](#getcurrentgroup "Permalink to this headline")

获取用户当前所在的群组ID

###### 语法[¶](#id71 "Permalink to this headline")

```

public int GetCurrentGroup();

```

返回值

Type:System.Int32

群组ID

###### 示例[¶](#id72 "Permalink to this headline")

```

<input id="Submit20" type="submit" value='GetCurrentGroup' runat="server"  onclick="GetCurrentGroup()" />

<script language="javascript" type="text/javascript">

   function GetCurrentGroup() {

        actx.GetCurrentGroup();

    }

</script>

```

##### GetMemberList(Int)[¶](#getmemberlist-int "Permalink to this headline")

获取成员列表

###### 语法[¶](#id73 "Permalink to this headline")

```

public string GetMemberList(int gid)

```

参数

gid

​ Type:System.Int32

​ 群组ID

返回值

Type: System.String

序列化的 JSON 字符串。

对象：成员实体类Member参考：成员信息

###### 示例[¶](#id74 "Permalink to this headline")

代码示例

```

 <input id="Submit20" type="submit" value='GetMemberList' runat="server"  onclick="GetMemberList()" />

<script language="javascript" type="text/javascript">

     function GetMemberList() {

        actx.GetMemberList(600901);

    }

</script>

```

返回值示例：

##### StartWatchGroup(Int)[¶](#startwatchgroup-int "Permalink to this headline")

监听群组

###### 语法[¶](#id75 "Permalink to this headline")

```

public int StartWatchGroup(int gid);

```

参数

gid

​ Type:System.Int32

​ 群组ID

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id76 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='StartWatchGroup' runat="server"  onclick="StartWatchGroup()" />

<script language="javascript" type="text/javascript">

    function StartWatchGroup() {

       actx.StartWatchGroup(600901);

    }

</script>

```

​

##### StopWatchGroup(Int)[¶](#stopwatchgroup-int "Permalink to this headline")

取消监听群组

###### 语法[¶](#id77 "Permalink to this headline")

```

public String StopWatchGroup(int gid);

```

参数

gid

​ Type:System.Int32

​ 群组ID

返回值

Type: System.String

序列化的 JSON 字符串。

对象：群组实体类Group参考：群组信息

###### 示例[¶](#id78 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='StopWatchGroup' runat="server"  onclick="StopWatchGroup()" />

<script language="javascript" type="text/javascript">

     function StopWatchGroup() {

       actx.StopWatchGroup(600901);

</script>

```

---

onCurrentGroupX事件

当前所在群组变化通知

###### 语法[¶](#id79 "Permalink to this headline")

```

void onCurrentGroupX(object gid, object group\_name);

```

参数

​ gid

​ Type: System.Object

​ 群组ID

group\_name

​ Type: System.Object

​ 群组名称

###### 示例[¶](#id80 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onCurrentGroupX(gid,group\_name)">

    alert("onCurrentGroupX:gid " + gid + " group\_name:" + group\_name);

    //更新成员列表

</script>

```

---

onMemberChangedX事件

群组成员发生变化通知

* 被动触发条件

​ 其他成员进入所在的组时

​ 其他成员在自身所在的组下线时

​ 切换群组时

* 主动触发

​ 进组

​ 离开群组

​ 创建临时组

###### 语法[¶](#id81 "Permalink to this headline")

```

void onMemberChangedX(object value);

```

参数

value

​ Type：System.String

​ 序列化的 JSON 字符串。

​ 对象：群组成员变化实体类 MemberChanged 参考 ： 群组成员变化

###### 示例[¶](#id82 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onMemberChangedX(val)">

    alert("onMemberChangedX" + val);

</script>

```

---

onMemberListX事件

成员列表获取完毕

###### 语法[¶](#id83 "Permalink to this headline")

```

void onMemberListX(object gid);

```

参数

​ gid

​ Type: System.Object

​ 群组ID

###### 示例[¶](#id84 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onMemberListX(gid)">

    alert("onMemberListX" + gid );

    //更新成员列表

</script>

```

---

onGroupListX事件

群组列表发生变化通知

###### 语法[¶](#id85 "Permalink to this headline")

```

void onGroupListX();

```

###### 示例[¶](#id86 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onGroupListX()">

    alert("onGroupListX");

     // 刷新群组列表

</script>

```

#### 对讲[¶](#id87 "Permalink to this headline")

##### StartSpeak方法()[¶](#startspeak "Permalink to this headline")

抢麦 - 获取话权

###### 语法[¶](#id88 "Permalink to this headline")

```

public int StartSpeak();

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id89 "Permalink to this headline")

见 onStartSpeakX事件

###### 示例[¶](#id90 "Permalink to this headline")

```

<input id="Submit20" type="submit" value='StartSpeak' runat="server"  onclick="StartSpeak()" />

<script language="javascript" type="text/javascript">

   function StartSpeak() {

       actx.StartSpeak();

    }

</script>

```

##### StopSpeak方法()[¶](#stopspeak "Permalink to this headline")

放麦 - 释放话权

###### 语法[¶](#id91 "Permalink to this headline")

```

public int StopSpeak()；

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id92 "Permalink to this headline")

见 onStopSpeakX事件

###### 示例[¶](#id93 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='StopSpeak' runat="server"  onclick="StopSpeak()" />

<script language="javascript" type="text/javascript">

   function StopSpeak() {

       actx.StopSpeak();

    }

</script>

```

##### GetPlayingSoundUser方法()[¶](#getplayingsounduser "Permalink to this headline")

获取正在播放声音的人的user信息

###### 语法[¶](#id94 "Permalink to this headline")

```

public string GetPlayingSoundUser()；

```

返回值

Type: System.String

序列化的 JSON 字符串。

对象：用户实体类User参考：用户信息

###### 示例[¶](#id95 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='GetPlayingSoundUser' runat="server"  onclick="GetPlayingSoundUser()" />

<script language="javascript" type="text/javascript">

   function GetPlayingSoundUser() {

       actx.GetPlayingSoundUser();

    }

</script>

```

返回数据示例：

```

{"gid":600901,"uid":50711,"role":0,"online":1,"has\_gid":1,"has\_role":1,"audio\_enable":1,"name":"账号01"}

```

##### GetSpeakingUsers方法()[¶](#getspeakingusers "Permalink to this headline")

获取正在讲话的人的user信息（不一定是正在播放的，对于多群组而言)

###### 语法[¶](#id96 "Permalink to this headline")

```

public string GetSpeakingUsers();

```

返回值

Type: System.String

序列化的 JSON 字符串。

对象：用户实体类User集合参考：用户信息

###### 示例[¶](#id97 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='GetSpeakingUsers' runat="server"  onclick="GetSpeakingUsers()" />

<script language="javascript" type="text/javascript">

    function GetSpeakingUsers() {

       actx.GetSpeakingUsers();

    }

</script>

```

返回数据示例

```

[{"gid":600901,"uid":50711,"role":0,"online":1,"has\_gid":1,"has\_role":1,"audio\_enable":1,"name":"账号01"},{"gid":600901,"uid":50712,"role":0,"online":1,"has\_gid":1,"has\_role":1,"audio\_enable":1,"name":"账号02"}]

```

##### IsSpeaking方法()[¶](#isspeaking "Permalink to this headline")

自己当前是否正在讲话

###### 语法[¶](#id98 "Permalink to this headline")

```

public bool IsSpeaking();

```

返回值

Type:System.Boolean

成功标示 true：在说话 ，false：没有说话

###### 示例[¶](#id99 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='IsSpeaking' runat="server"  onclick="IsSpeaking()" />

<script language="javascript" type="text/javascript">

   function IsSpeaking() {

      var result = actx.IsSpeaking();

     if(result){

       //正在讲话

     }else{

       //没有讲话

     }

    }

</script>

```

##### IsListening()[¶](#islistening "Permalink to this headline")

自己当前是否正收听语音

###### 语法[¶](#id100 "Permalink to this headline")

```

public bool IsListening();

```

返回值

Type:System.Boolean

成功标示 true：在说话 ，false：没有说话

###### 示例[¶](#id101 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='IsListening' runat="server"  onclick="IsListening()" />

<script language="javascript" type="text/javascript">

    function IsListening() {

      var result = actx.IsListening();

     if(result){

       //正在讲话

     }else{

       //没有讲话

     }

    }

</script>

```

---

onStartSpeakX事件

抢麦通知

* 主动触发条件

​ 调用StartSpeak()方法

###### 语法[¶](#id102 "Permalink to this headline")

```

void onStartSpeakX(object gid, object group\_name);

```

参数

gid

​ Type: System.Object

​ 当前讲话者所在的群组ID

group\_name

​ Type: System.Object

​ 当前讲话者所在的群组名称

###### 示例[¶](#id103 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStartSpeakX(gid,group\_name)">

    alert("onStartSpeakX gid:" + gid + " group\_name:" + group\_name);

</script>

```

---

onStopSpeakX事件

放麦通知

* 主动触发条件

​ 调用StopSpeak()方法

* 被动触发事件

​ 讲话超时被摘麦

###### 语法[¶](#id104 "Permalink to this headline")

```

void onStopSpeakX(object gid, object group\_name);

```

参数

gid

​ Type: System.Object

​ 当前讲话者所在的群组ID

group\_name

​ Type: System.Object

​ 当前讲话者所在的群组名称

###### 示例[¶](#id105 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStopSpeakX(gid,group\_name)">

    alert("onStopSpeakX gid:" + gid + " group\_name:" + group\_name);

</script>

```

---

onStartPlayingX事件

开始播放讲话者事件通知

###### 语法[¶](#id106 "Permalink to this headline")

```

void onStartPlayingX(object uid, object name, object gid, object group\_name);

```

参数

uid

​ Type: System.Object

​ 讲话者ID

name

​ Type: System.Object

​ 讲话者名称

gid

​ Type: System.Object

​ 群组ID

group\_name

​ Type: System.Object

​ 群组名称

###### 示例[¶](#id107 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStartPlayingX(uid,name,gid,group\_name)">

    alert("onStartPlayingX uid:" + uid + " name:" + name + " gid:" + gid + " group\_name:" + group\_name);

</script>

```

---

onStopPlayingX事件

停止播放讲话者事件通知

###### 语法[¶](#id108 "Permalink to this headline")

```

void onStopPlayingX(object uid, object name, object gid, object group\_name);

```

参数

uid

​ Type: System.Object

​ 讲话者ID

name

​ Type: System.Object

​ 讲话者名称

gid

​ Type: System.Object

​ 群组ID

group\_name

​ Type: System.Object

​ 群组名称

###### 示例[¶](#id109 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStopPlayingX(uid,name,gid,group\_name)">

    alert("onStopPlayingX uid:" + uid + " name:" + name + " gid:" + gid + " group\_name:" + group\_name);

</script>

```

---

onUserStartSpeakX事件

调度员所在群组里，其他成员抢麦成功事件通知

###### 语法[¶](#id110 "Permalink to this headline")

```

void onUserStartSpeakX(object uid, object name, object gid, object group\_name);

```

参数

uid

​ Type: System.Object

​ 讲话者ID

name

​ Type: System.Object

​ 讲话者名称

gid

​ Type: System.Object

​ 群组ID

group\_name

​ Type: System.Object

​ 群组名称

###### 示例[¶](#id111 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onUserStartSpeakX(uid,name,gid,group\_name)">

    alert("onUserStartSpeakX uid:" + uid + " name:" + name + " gid:" + gid + " group\_name:" + group\_name);

</script>

```

---

onUserStopSpeakX事件

调度员所在群组里，其他成员放麦事件通知

###### 语法[¶](#id112 "Permalink to this headline")

```

void onUserStopSpeakX(object uid, object name, object gid, object group\_name);

```

参数

uid

​ Type: System.Object

​ 讲话者ID

name

​ Type: System.Object

​ 讲话者名称

gid

​ Type: System.Object

​ 群组ID

group\_name

​ Type: System.Object

​ 群组名称

###### 示例[¶](#id113 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onUserStopSpeakX(uid,name,gid,group\_name)">

    alert("onUserStopSpeakX uid:" + uid + " name:" + name + " gid:" + gid + " group\_name:" + group\_name);

</script>

```

#### 广播[¶](#id114 "Permalink to this headline")

##### SendTextBroadcast方法(string , Array)[¶](#sendtextbroadcast-string-array "Permalink to this headline")

发送文字广播

###### 语法[¶](#id115 "Permalink to this headline")

```

public int SendTextBroadcast(string text, Array uids)

```

参数

text

​ Type:System.String

​ 文字信息（文字长度1-40个字符）

uids

​ Type:System.Array

​ 一维Array，收听广播的用户ID集合

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id116 "Permalink to this headline")

见 onSendedX事件

###### 示例[¶](#id117 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='SendTextBroadcast' runat="server"  onclick="SendTextBroadcast()" />

<script language="javascript" type="text/javascript">

    function SendTextBroadcast() {

        var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.SendTextBroadcast("文字广播测试", uids);

    }

</script>

```

##### StartRecordBroadcastAudio方法()[¶](#startrecordbroadcastaudio "Permalink to this headline")

开始录制音频文件

###### 语法[¶](#id118 "Permalink to this headline")

```

public int StartRecordBroadcastAudio()

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id119 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='StartRecordBroadcastAudio' runat="server"  onclick="StartRecordBroadcastAudio()" />

<script language="javascript" type="text/javascript">

    function StartRecordBroadcastAudio() {

        actx.StartRecordBroadcastAudio();

    }

</script>

```

##### StopRecordBroadcastAudio方法()[¶](#stoprecordbroadcastaudio "Permalink to this headline")

停止录制音频文件

###### 语法[¶](#id120 "Permalink to this headline")

```

public int StopRecordBroadcastAudio()

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id121 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='StopRecordBroadcastAudio' runat="server"  onclick="StopRecordBroadcastAudio()" />

<script language="javascript" type="text/javascript">

    function StopRecordBroadcastAudio() {

        actx.StopRecordBroadcastAudio();

    }

</script>

```

##### SendAudioBroadcast(Array)[¶](#sendaudiobroadcast-array "Permalink to this headline")

发送语音广播

###### 语法[¶](#id122 "Permalink to this headline")

```

public int SendAudioBroadcast(Array uids)

```

参数

uids

​ Type:System.Array

​ 一维Array，收听广播的用户ID集合

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id123 "Permalink to this headline")

见 onSendedX事件

###### 示例[¶](#id124 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='SendAudioBroadcast' runat="server"  onclick="SendAudioBroadcast()" />

<script language="javascript" type="text/javascript">

    function SendAudioBroadcast() {

        var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

       actx.SendAudioBroadcast(uids);

    }

</script>

```

##### PlayRecordBroadcastAudio方法()[¶](#playrecordbroadcastaudio "Permalink to this headline")

播放已录制的待播放音频文件

###### 语法[¶](#id125 "Permalink to this headline")

```

public int PlayRecordBroadcastAudio()

```

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 通知事件[¶](#id126 "Permalink to this headline")

见 OnPlayStopX事件

###### 示例[¶](#id127 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='PlayRecordBroadcastAudio' runat="server"  onclick="PlayRecordBroadcastAudio()" />

<script language="javascript" type="text/javascript">

    function PlayRecordBroadcastAudio() {

        actx.PlayRecordBroadcastAudio();

    }

</script>

```

---

onSendedX事件

发送广播结果响应事件

* 主动触发条件 执行 SendAudioBroadcast 方法

执行SendTextBroadcast方法

###### 语法[¶](#id128 "Permalink to this headline")

```

void onSendedX(object success);

```

参数

success：

​ Type:System.Object

​ ture:发送成功 false:发送失败

###### 示例[¶](#id129 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onSendedX(success)">

    alert("onSendedX " + success);

    if(success) {

      //发送成功

    }else{

      //发送失败

    }

</script>

```

---

OnPlayStopX事件

录音结束回调

* 主动触发条件

​ 执行 PlayRecordBroadcastAudio 方法

###### 语法[¶](#id130 "Permalink to this headline")

```

void OnPlayStopX();

```

###### 示例[¶](#id131 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="OnPlayStopX()">

    //调用发送广播方法

</script>

```

#### 调度[¶](#id132 "Permalink to this headline")

##### TempJoinGroup方法(Int,Array)[¶](#tempjoingroup-int-array "Permalink to this headline")

将在线的用户临时加入到指定的群组中

###### 语法[¶](#id133 "Permalink to this headline")

```

public int TempJoinGroup(int gid, Array uids)

```

参数

gid

​ Type:System.Int32

​ 群组ID

uids

​ Type:System.Array

​ 一维Array，用户ID集合

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id134 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='TempJoinGroup' runat="server"  onclick="TempJoinGroup()" />

<script language="javascript" type="text/javascript">

    function TempJoinGroup() {

       var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.TempJoinGroup(600901, uids);

    }

</script>

```

##### TempLeaveGroup(Int, Array)[¶](#templeavegroup-int-array "Permalink to this headline")

临时移出组

###### 语法[¶](#id135 "Permalink to this headline")

```

public int TempLeaveGroup(int gid, Array uids)

```

参数

gid

​ Type:System.Int32

​ 群组ID

uids

​ Type:System.Array

​ 一维Array，用户ID集合

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id136 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='TempLeaveGroup' runat="server"  onclick="TempLeaveGroup()" />

<script language="javascript" type="text/javascript">

   function TempLeaveGroup() {

        var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.TempLeaveGroup(0, uids);

    }

</script>

```

##### Audioenable方法(Array, bool)[¶](#audioenable-array-bool "Permalink to this headline")

遥开遥闭

###### 语法[¶](#id137 "Permalink to this headline")

```

public int Audioenable(Array uids, bool audioenabled)

```

参数

uids

​ Type:System.Array

​ 一维Array，用户ID集合

audioenabled

​ Type:System.Boolean

​ true:遥开 false:遥闭

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id138 "Permalink to this headline")

```

<input id="Submit20" type="submit" value='遥开' runat="server"  onclick="Audioenable()" />

<script language="javascript" type="text/javascript">

    function Audioenable() {

        var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.Audioenable(uids,true);

    }

</script>

```

##### ForceDispatch方法(Array)[¶](#forcedispatch-array "Permalink to this headline")

强拉，在群组列表中把在线不在本群组内的人员强拉回调度员所在群组

###### 语法[¶](#id139 "Permalink to this headline")

```

public int ForceDispatch(Array uids)

```

参数

uids

​ Type:System.Array

​ 一维Array，用户ID集合

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id140 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='ForceDispatch' runat="server"  onclick="ForceDispatch()" />

<script language="javascript" type="text/javascript">

    function ForceDispatch() {

       var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.ForceDispatch(uids);

    }

</script>

```

##### Takemic方法(Array)[¶](#takemic-array "Permalink to this headline")

强拆，在群组列表中把正在讲话的用户强拆，强制中断其语音

###### 语法[¶](#id141 "Permalink to this headline")

```

public int Takemic(Array uids)

```

参数

uids

​ Type:System.Array

​ 一维Array，用户ID集合

返回值

Type:System.Int32

执行成功标示：0【成功】 -1【失败】

###### 示例[¶](#id142 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='Takemic' runat="server"  onclick="Takemic()" />

<script language="javascript" type="text/javascript">

   function Takemic() {

      var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        alert(actx.Takemic(mycars));

    }

</script>

```

##### GetUser方法(int)[¶](#getuser-int "Permalink to this headline")

获取用户信息

###### 语法[¶](#id143 "Permalink to this headline")

```

public string GetUser(int uid)

```

参数

uid

​ Type:System.Int32

​ 用户ID

返回值

Type: System.String

序列化的 JSON 字符串。

对象：用户实体类User参考：用户信息

###### 示例[¶](#id144 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='GetUser' runat="server"  onclick="GetUser()" />

<script language="javascript" type="text/javascript">

   function GetUser() {

        actx.GetUser(50711);

    }

</script>

```

返回数据示例

```

{"gid":600901,"uid":50711,"role":0,"online":1,"has\_gid":1,"has\_role":1,"audio\_enable":1,"name":"账号01"}

```

##### GetUsers方法(Array)[¶](#getusers-array "Permalink to this headline")

获取用户信息集合

###### 语法[¶](#id145 "Permalink to this headline")

```

public string GetUser(Array uids)

```

参数

uids

​ Type:System.Array

​ 一维Array，用户ID集合

返回值

Type: System.String

序列化的 JSON 字符串。

对象：用户实体类User集合参考：用户信息

###### 示例[¶](#id146 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='GetUsers' runat="server"  onclick="GetUsers()" />

<script language="javascript" type="text/javascript">

   function GetUsers() {

        var uids = new Array()

        uids[0] = 50720;

        uids[1] = 50720;

        actx.GetUsers(uids);

    }

</script>

```

返回数据示例

```

[{"gid":600901,"uid":50711,"role":0,"online":1,"has\_gid":1,"has\_role":1,"audio\_enable":1,"name":"账号01"}]

```

---

onDispatchedX事件

强拉结果通知事件

* 主动触发条件

​ 执行ForceDispatch 方法

###### 语法[¶](#id147 "Permalink to this headline")

```

void onDispatchedX(object usersListjson);

```

参数

usersListjson

Type: System.Object

序列化的 JSON 字符串。

对象：Dispatched 参考 ： 强拉信息

###### 示例[¶](#id148 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onDispatchedX(usersListjson)">

    alert("onDispatchedX" + usersListjson);

</script>

```

---

onTakeMicX事件

强拆结果通知事件

* 主动触发条件

​ 执行 Takemic 方法

###### 语法[¶](#id149 "Permalink to this headline")

```

void onTakeMicX(object success);

```

参数

success

​ Type: System.Object

​ true：成功 false：失败

###### 示例[¶](#id150 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onTakeMicX(success)">

    alert("onTakeMicX" + success);

</script>

```

---

onAudioEnabledX事件

遥开遥闭结果通知事件

* 主动触发条件

​ 执行 Audioenable方法

###### 语法[¶](#id151 "Permalink to this headline")

```

void onAudioEnabledX(object usersListjson);

```

参数

usersListjson

Type: System.Object

序列化的 JSON 字符串。

对象： Andioenable 参考 ： 遥开遥闭

###### 示例[¶](#id152 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onAudioEnabledX(usersListjson)">

    alert("onAudioEnabledX" + usersListjson);

</script>

```

#### 本地录音[¶](#id153 "Permalink to this headline")

##### EnableLocalRecord方法(bool, string)[¶](#enablelocalrecord-bool-string "Permalink to this headline")

设置本地录音

###### 语法[¶](#id154 "Permalink to this headline")

```

public int EnableLocalRecord(bool enable, string pathDir)

```

参数

enable

​ Type:System.Boolean

​ true:开启本地录音 false:关闭本地录音

pathDir

​ Type:System.String

​ 本地录音文件保存的路径

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id155 "Permalink to this headline")

```

 <input id="Submit20" type="submit" value='EnableLocalRecord' runat="server"  onclick="EnableLocalRecord()" />

<script language="javascript" type="text/javascript">

    function EnableLocalRecord() {

        actx.EnableLocalRecord(true，"d:\");

    }

</script>

```

##### PlayLocalRecord方法(string)[¶](#playlocalrecord-string "Permalink to this headline")

播放本地录音

###### 语法[¶](#id156 "Permalink to this headline")

```

public int PlayLocalRecord(string path)

```

参数

path

​ Type:System.String

​ 文件的绝对路径（播放的文件格式为evrc）

返回值

Type:System.Int32

执行成功标示 0：成功 ，-1：失败

###### 示例[¶](#id157 "Permalink to this headline")

```

<input id="Submit20" type="submit" value='PlayLocalRecord' runat="server"  onclick="PlayLocalRecord()" />

<script language="javascript" type="text/javascript">

   function PlayLocalRecord() {

        actx.PlayLocalRecord(true，"D:\2018_1_18_13_45_4_996_600901_50711.evrc");

    }

</script>

```

##### onStartRecordX事件[¶](#onstartrecordx "Permalink to this headline")

开始录音的通知事件

###### 语法[¶](#id158 "Permalink to this headline")

```

void onStartRecordX(object gid, object uid, object starttime, object filename);

```

###### 示例[¶](#id159 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStartRecordX(gid,uid,starttime,filename)">

</script>

```

参数

gid

​ Type: System.Object

​ 群组ID

uid

​ Type: System.Object

​ 讲话者ID

starttime

​ Type: System.Object

​ 开始录制时间

filename

​ Type: System.Object

​ 文件名称

##### onStopRecordX事件[¶](#onstoprecordx "Permalink to this headline")

结束录音的通知事件

###### 语法[¶](#id160 "Permalink to this headline")

```

void onStopRecordX(object success, object gid, object uid, object finishtime, object filename);

```

参数

success

​ Type: System.Object

​ 执行结果true:成功 false:失败

gid

​ Type: System.Object

​ 群组ID

uid

​ Type: System.Object

​ 讲话者ID

finishtime

​ Type: System.Object

​ 结束录制时间

filename

​ Type: System.Object

​ 文件名称

###### 示例[¶](#id161 "Permalink to this headline")

```

<script language="javascript" for="myAcX" type="text/javascript" event="onStopRecordX(success,gid,uid,finishtime,filename)">

</script>

```

### 数据结构定义[¶](#id162 "Permalink to this headline")

###

账号信息

```

public struct Account

{

       /// <summary>

       /// 登录名

       /// </summary>

       public string Name

       /// <summary>

       /// 密码

       /// </summary>

       public string Password

       /// <summary>

       /// 用户角色

       /// 0：对讲用户 3：调度员

       /// </summary>

       public int Role

       /// <summary>

       /// 是否自动登录

       /// </summary>

       public int IsAutoLogin

       /// <summary>

       /// 是否记住密码

       /// </summary>

       public int IsRemembered

}

```

###

群组信息

```

 public struct Group

   {

    /// <summary>

    /// 群组类型：1为普通组，2为临时组，3为紧急组

    /// </summary>

    public int type;

    /// <summary>

    /// 群组编号

    /// </summary>

    public UInt32 gid;

    /// <summary>

    /// 群组名称

    /// </summary>

    public string name;

    /// <summary>

    /// 群组优先级

    /// </summary>

    public int prior;

    /// <summary>

    /// 服务IP

    /// </summary>

    public UInt32 ip;

    /// <summary>

    /// 服务端口

    /// </summary>

    public UInt16 port;

}

```

###

用户信息

```

public struct User

{

  /// <summary>

  /// 所在群组的编号

  /// </summary>

  public UInt32 gid;

  /// <summary>

  /// 用户编号

  /// </summary>

  public UInt32 uid;

  /// <summary>

  /// 用户角色 0：对讲用户 3：调度员

  /// </summary>

  public UInt32 role;

  /// <summary>

  /// 在线状态

  /// </summary>

  public int online;

  /// <summary>

  /// 是否有群组编号

  /// </summary>

  public int has_gid;

  /// <summary>

  /// 是否有角色

  /// </summary>

  public int has_role;

  /// <summary>

  /// 语音状态是否打开

  /// </summary>

  public int audio_enabled;

  /// <summary>

  /// 成员名称

  /// </summary>

  public string name;

}

```

###

成员信息

```

public struct Member

{

    /// <summary>

    /// 所在群组的编号

    /// </summary>

    public UInt32 gid;

    /// <summary>

    /// 用户编号

    /// </summary>

    public UInt32 uid;

    /// <summary>

    /// 用户角色

    /// </summary>

    public UInt32 role;

    /// <summary>

    /// 在线状态

    /// </summary>

    public int online;

    /// <summary>

    /// 是否再组

    /// </summary>

    public int ingroup;

    /// <summary>

    /// 是否有群组编号

    /// </summary>

    public int has\_gid;

    /// <summary>

    /// 是否有角色

    /// </summary>

    public int has\_role;

    /// <summary>

    /// 语音状态是否打开

    /// </summary>

    public int audio\_enabled;

    /// <summary>

    /// 成员名称

    /// </summary>

    public string name;

}

```

###

群组成员变化

```

public class MemberChanged

   {

       /// <summary>

       /// 群组ID

       /// </summary>

       public int Gid;

       /// <summary>

       /// 新加入当前群组人员id

       /// </summary>

       public List<int> Us;

       /// <summary>

       /// 新加入成员个数

       /// </summary>

       public int Uc;

       /// <summary>

       ///退出当前群组人员id

       /// </summary>

       public List<int> Rs;

       /// <summary>

       /// 退出成员个数

       /// </summary>

       public int Rc;

       /// <summary>

       /// 进入当前群组人员 id

       /// </summary>

       public List<int> Js;

       /// <summary>

       /// 进入成员个数

       /// </summary>

       public int Jc;

       /// <summary>

       /// 离开当前群组人员i

       /// </summary>

       public List<int> Ls;

       /// <summary>

       /// 离开成员个数

       /// </summary>

       public int Lc;

   }

```

###

强拉信息

```

public  class Dispatched

   {

       /// <summary>

       /// 执行结果

       /// </summary>

       public bool Success;

       /// <summary>

       /// 是否有群组

       /// </summary>

       public bool HasGid;

       /// <summary>

       /// 群组ID

       /// </summary>

       public int Gid;

       /// <summary>

       /// 用户ID集合

       /// </summary>

       public List<int> Uids;

       /// <summary>

       /// 用户个数

       /// </summary>

       public int UidSize;

   }

```

###

遥开遥闭

```

public class AudioEnabled

    {

        /// <summary>

        /// 执行结果

        /// </summary>

        public bool Success;

        /// <summary>

        /// 遥开遥闭状态

        /// </summary>

        public bool AudioEnable;

        /// <summary>

        /// 用户ID集合

        /// </summary>

        public List<int> Uids;

        /// <summary>

        /// 用户个数

        /// </summary>

        public int Size;

    }

```

### 数据定义[¶](#id163 "Permalink to this headline")

###

错误码

```

-1：帐号密码错误

-2：帐号已欠费或已超出服务期

-3：帐号不存在

-4：无效的帐号登录权限

-10：帐号已在其他位置登录

-11：帐号登录超时

-20：网络连接失败

-21：网络正在重连

-30：加入群组失败

-31：加入群组请求超时

-40:当前有人正在讲话<服务器回馈>

-41：短时间内不允许多次抢麦

-42：摇闭状态不允许抢麦

-43：内部会话状态错误<主动放麦后立马去抢麦>

-44：抢麦时申请音频焦点失败

-45：已较低的优先级抢麦<出现在当时正在有人讲话，自身比讲话人优先级低时>

-46：网络不稳定

-50：打开录音设备失败

```

#### 接口调用返回值[¶](#id164 "Permalink to this headline")

```

-1：操作失败

 0：操作成功

```

###

用户在线状态

```

public enum OnlineStatus

{

    /// <summary>

    /// 未知状态

    /// </summary>

    ONLINE\_STATUS\_UNKNOWN = 0,

    /// <summary>

    /// 离线状态

    /// </summary>

    ONLINE\_STATUS\_OFFLINE = 1,

    /// <summary>

    /// 登录中

    /// </summary>

    ONLINE\_STATUS\_LOGINING = 2,

    /// <summary>

    /// 在线状态

    /// </summary>

    ONLINE\_STATUS\_ONLINE = 3

}

```

Indices and tables[¶](#indices-and-tables "Permalink to this headline")

-----------------------------------------------------------------------

* [Index](genindex.html)

* [Module Index](py-modindex.html)

* [Search Page](search.html)

### [Table Of Contents](index.html#document-index)

* [1 概述](index.html#document-c_win)

* [2 功能性接口](index.html#id2)

	+ [2.1 初始化接口](index.html#id3)

	+ [2 .2 登录配置接口](index.html#id4)

	+ [2.3 对讲接口](index.html#id5)

	+ [2.4 群组操作接口](index.html#id6)

	+ [2.5 用户操作接口](index.html#id7)

	+ [2.6 监听接口](index.html#id8)

	+ [2.7 广播操作接口](index.html#id9)

	+ [2.8 调度操作接口](index.html#id10)

	+ [2.9 本地录音操作接口](index.html#id11)

* [3 消息通知回调接口](index.html#id12)

* [4 错误信息标识](index.html#id13)

* [5 常用枚举定义](index.html#id14)

* [6 结构类型定义](index.html#id15)

* [概述](index.html#document-csharp)

	+ [安装](index.html#id2)

	+ [初始化](index.html#id8)

* [接口定义](index.html#id10)

	+ [账号管理](index.html#id11)

	+ [群组](index.html#id34)

	+ [对讲](index.html#id46)

	+ [广播](index.html#id57)

	+ [调度](index.html#id68)

	+ [本地录音](index.html#id78)

* [数据结构定义](index.html#id84)

	+ [账号信息](index.html#id85)

	+ [群组信息](index.html#id86)

	+ [用户信息](index.html#id87)

	+ [成员信息](index.html#id88)

* [数据定义](index.html#id89)

	+ [登录错误码](index.html#id90)

	+ [接口调用返回值](index.html#id91)

	+ [用户在线状态](index.html#id92)

* [安装](index.html#document-csharp_activex)

* [初始化](index.html#id2)

	+ [初始化配置](index.html#id3)

* [示例](index.html#id4)

	+ [登录示例](index.html#id5)

	+ [主页面示例](index.html#id8)

* [接口定义](index.html#id11)

	+ [账号管理](index.html#id12)

	+ [群组](index.html#id56)

	+ [对讲](index.html#id87)

	+ [广播](index.html#id114)

	+ [调度](index.html#id132)

	+ [本地录音](index.html#id153)

* [数据结构定义](index.html#id162)

* [数据定义](index.html#id163)

	+ [接口调用返回值](index.html#id164)

### Quick search

### Navigation

* [善理对讲SDK alpha documentation](index.html#document-index) »

 © Copyright 2018, 善理通益.

 Created using [Sphinx](http://sphinx-doc.org/) 1.6.5.

 

