Commit 759a41ad authored by David黄金龙's avatar David黄金龙

聊天室 相关功能

parent 49ea243c
...@@ -11,7 +11,7 @@ import HyphenateChat ...@@ -11,7 +11,7 @@ import HyphenateChat
class YHIMTestViewController: YHBaseViewController { class YHIMTestViewController: YHBaseViewController {
private let roomID : String = "265231954673700" private let roomID : String = "265239166779417"
private let yHID : String = "1040217809134595" private let yHID : String = "1040217809134595"
...@@ -21,181 +21,272 @@ class YHIMTestViewController: YHBaseViewController { ...@@ -21,181 +21,272 @@ class YHIMTestViewController: YHBaseViewController {
//1. //1.
gk_navTitle = "IM 测试" gk_navTitle = "IM 测试"
let addBtn = UIButton() if EMClient.shared().isLoggedIn {
addBtn.setTitle("发送", for: .normal) YHHUD.flash(message: "已登录IM服务器")
view.addSubview(addBtn)
addBtn.snp.makeConstraints { make in
make.centerX.centerY.equalToSuperview()
make.height.width.equalTo(200)
}
addBtn.backgroundColor = UIColor.red//for test hjl
addBtn.addTarget(self, action: #selector(sendMessage), for: .touchUpInside) // EMClient.shared().logout(true) { err in
// if let err = err {
//2 // YHHUD.flash(message: err.errorDescription)
//注册用户
// 异步方法
// [[EMClient sharedClient] registerWithUsername:@"username"
// password:@"your password"
// completion:^(NSString *aUsername, EMError *aError) {
// }];
// EMClient.shared().register(withUsername: "davidTest", password: "galaxy-666") { aUsername, error in
// if let err = error {
// print("注册失败")
// print(err.description)
// } else {
// print("注册成功")
//
//
// //登录账号
//// [[EMClient sharedClient] loginWithUsername:@"username"
//// password:@"your password"
//// completion:^(NSString *aUsername, EMError *aError) {
////
//// }];
//
// EMClient.shared().login(withUsername: "davidTest", password: "galaxy-666") { aUsername, error in
// if let err = error {
// print("登录失败")
// print(err.description)
// } else { // } else {
// print("登录成功") // YHHUD.flash(message: "退出IM服务器-成功")
//
//
//
// }
// }
// } // }
// } // }
// return
}
setupUI()
//2、处理代理回调
EMClient.shared().roomManager?.add(self, delegateQueue: nil) EMClient.shared().roomManager?.add(self, delegateQueue: nil)
EMClient.shared().chatManager?.add(self, delegateQueue: nil) EMClient.shared().chatManager?.add(self, delegateQueue: nil)
}
deinit {
EMClient.shared().chatManager?.remove(self)
EMClient.shared().roomManager?.remove(self)
}
}
EMClient.shared().login(withUsername: yHID, token: "YWMtqUTnNKsxEe-ZVA-eCJXgmszPhuTA1UDqp8xrPJoVisk1wDGwqzER74uZ-bqVfmOVAwMAAAGTY4WtWgABUYBw0BfZJnoSM_kNt49EM81gKznPICMuPw-M2Fhj96-G7Q") { name, err in private extension YHIMTestViewController {
if let err = err { func setupUI() {
var tagView : UIView?
print(err) //1.登录
if err.code.rawValue == 200 { do {
EMClient.shared().roomManager?.joinChatroom("265249570750475", ext: "nickname=DavidTest", leaveOtherRooms: true, completion: { room, err in let addBtn = UIButton()
addBtn.setTitle("1、用户登录", for: .normal)
view.addSubview(addBtn)
addBtn.snp.makeConstraints { make in
make.top.equalToSuperview().offset(80)
make.centerX.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(44)
}
addBtn.backgroundColor = UIColor.red//for test hjl
addBtn.addTarget(self, action: #selector(userLoginOp), for: .touchUpInside)
tagView = addBtn
}
if let err = err { //2.加入聊天室
print("加入聊天室 - 失败") do {
print(err) let addBtn = UIButton()
} else { addBtn.setTitle("2、加入聊天室", for: .normal)
print("加入聊天室 - 成功") view.addSubview(addBtn)
if let tagView = tagView {
addBtn.snp.makeConstraints { make in
make.top.equalTo(tagView.snp.bottom).offset(20)
make.centerX.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(44)
} }
})
} else {
print("登录 - 失败")
} }
} else { addBtn.backgroundColor = UIColor.red
print("登录 - 成功") addBtn.addTarget(self, action: #selector(joinChatRoom), for: .touchUpInside)
tagView = addBtn
}
//发送消息
EMClient.shared().roomManager?.joinChatroom("265249570750475", ext: "nickname=DavidTest", leaveOtherRooms: true, completion: { room, err in
if let err = err { //3.发送消息
print("加入聊天室 - 失败") do {
print(err) let addBtn = UIButton()
} else { addBtn.setTitle("3、发送信息", for: .normal)
print("加入聊天室 - 成功") view.addSubview(addBtn)
if let tagView = tagView {
addBtn.snp.makeConstraints { make in
make.top.equalTo(tagView.snp.bottom).offset(20)
make.centerX.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(44)
} }
})
} }
addBtn.backgroundColor = UIColor.red
addBtn.addTarget(self, action: #selector(sendMessage), for: .touchUpInside)
tagView = addBtn
} }
//4.获取历史消息
do {
let addBtn = UIButton()
addBtn.setTitle("4、获取历史消息-需付费", for: .normal)
view.addSubview(addBtn)
if let tagView = tagView {
addBtn.snp.makeConstraints { make in
make.top.equalTo(tagView.snp.bottom).offset(20)
make.centerX.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(44)
}
}
addBtn.backgroundColor = UIColor.red
addBtn.addTarget(self, action: #selector(fetchHistoryMessage), for: .touchUpInside)
tagView = addBtn
} }
deinit {
EMClient.shared().chatManager?.remove(self) //5、退出聊天室
EMClient.shared().roomManager?.remove(self) do {
let addBtn = UIButton()
addBtn.setTitle("5、退出聊天室", for: .normal)
view.addSubview(addBtn)
if let tagView = tagView {
addBtn.snp.makeConstraints { make in
make.top.equalTo(tagView.snp.bottom).offset(20)
make.centerX.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(44)
}
}
addBtn.backgroundColor = UIColor.red
addBtn.addTarget(self, action: #selector(quitChatRoom), for: .touchUpInside)
tagView = addBtn
} }
}
private extension YHIMTestViewController {
@objc func sendMessage() {
getRoomInfo() //6.聊天室成员列表
// 调用 initWithText 创建文本消息。`content` 为文本消息的内容。 do {
let textMessageBody = EMTextMessageBody(text: "金龙发送的信息") let addBtn = UIButton()
// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。 addBtn.setTitle("6、聊天室成员列表", for: .normal)
let conversationId = "265249570750475" view.addSubview(addBtn)
let message = EMChatMessage(conversationID: conversationId, body: textMessageBody, ext:nil) if let tagView = tagView {
// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。 addBtn.snp.makeConstraints { make in
message.chatType = .chatRoom make.top.equalTo(tagView.snp.bottom).offset(20)
// 发送消息。 make.centerX.equalToSuperview()
// EMClient.shared().chatManager?.sendMessage(message, progress: nil) { result in make.width.equalTo(300)
// switch result { make.height.equalTo(44)
// case .success: }
// print("消息发送成功") }
// case .failure(let error): addBtn.backgroundColor = UIColor.red
// print("消息发送失败: \(error.localizedDescription)") addBtn.addTarget(self, action: #selector(fetchRoomMemberList), for: .touchUpInside)
// } tagView = addBtn
// } }
}
EMClient.shared().chatManager?.send(message, progress: nil, completion: { message, error in //6.聊天室成员列表
@objc func fetchRoomMemberList(){
EMClient.shared().roomManager?.getChatroomMemberListFromServer(withId: roomID, cursor: nil, pageSize: 20, completion: { result, error in
if let err = error { if let err = error {
printLog("消息发送 --- 失败") YHHUD.flash(message: err.errorDescription)
} else { } else {
printLog("消息发送 --- 成功") if let ret = result {
let count = (ret.list?.count ?? 0) + 1
YHHUD.flash(message: "聊天室人数 \(count)")
}
}
})
//获取历史消息 }
let option = EMFetchServerMessagesOption();
EMClient.shared().chatManager?.fetchMessagesFromServer(by: "265249570750475", conversationType: .chatRoom, cursor: "", pageSize: 50, option: option, completion: { result, err in //5.退出聊天室
@objc func quitChatRoom(){
EMClient.shared().roomManager?.leaveChatroom(roomID, completion: { err in
if let error = err {
YHHUD.flash(message: error.errorDescription)
} else {
YHHUD.flash(message: "退出聊天室-成功")
}
})
}
//4.获取历史消息
@objc func fetchHistoryMessage(){
let option = EMFetchServerMessagesOption()
EMClient.shared().chatManager?.fetchMessagesFromServer(by: self.roomID, conversationType: .chatRoom, cursor: "0", pageSize: 50, option: option, completion: { result, err in
DispatchQueue.main.async {
if let err = err { if let err = err {
// 获取失败 // 获取失败
printLog("获取历史消息 --- 失败") printLog("获取历史消息--失败")
printLog(err) printLog(err)
YHHUD.flash(message: "获取历史消息-失败")
} else { } else {
// 获取成功 // 获取成功
printLog("获取历史消息 --- 成功")
printLog(result) printLog(result)
YHHUD.flash(message: "获取历史消息-成功")
} }
}
}) })
}
//3.发送消息
@objc func sendMessage() {
let textMessageBody = EMTextMessageBody(text: "金龙发送的信息")
// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。
let conversationId = roomID
let message = EMChatMessage(conversationID: conversationId, body: textMessageBody, ext:["fromNickName":"YinHe3775"])
// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。
message.chatType = .chatRoom
EMClient.shared().chatManager?.send(message, progress: nil, completion: { message, error in
if let err = error {
YHHUD.flash(message: err.errorDescription)
} else {
YHHUD.flash(message: "消息发送-成功")
} }
}) })
} }
//2.加入聊天室
func getRoomInfo() { @objc func joinChatRoom() {
EMClient.shared().roomManager?.getChatroomSpecificationFromServer(withId: roomID, fetchMembers: true, completion: { emChatRoom, err in EMClient.shared().roomManager?.joinChatroom(self.roomID, ext: "nickname=DavidTest", leaveOtherRooms: true, completion: { room, err in
printLog(emChatRoom)
if let err = err { if let err = err {
YHHUD.flash(message: err.errorDescription)
} else { } else {
YHHUD.flash(message: "加入聊天室-成功")
} }
}) })
}
//1.IM 用户登录
EMClient.shared().roomManager?.getChatroomSpecificationFromServer(withId: roomID, completion: { emChatRoom, err in @objc func userLoginOp() {
printLog(emChatRoom) EMClient.shared().login(withUsername: yHID, token: "YWMtqUTnNKsxEe-ZVA-eCJXgmszPhuTA1UDqp8xrPJoVisk1wDGwqzER74uZ-bqVfmOVAwMAAAGTY4WtWgABUYBw0BfZJnoSM_kNt49EM81gKznPICMuPw-M2Fhj96-G7Q") { name, err in
if let err = err { if let err = err {
if err.code.rawValue == 200 {
YHHUD.flash(message: err.errorDescription)
} else { } else {
YHHUD.flash(message: "登录-失败")
if let roomInfo = emChatRoom {
printLog(roomInfo.adminList)
printLog(roomInfo.chatroomId)
printLog(roomInfo.blacklist)
printLog(roomInfo.memberList)
} }
} else {
YHHUD.flash(message: "登录-成功")
} }
})
} }
}
// func getRoomInfo() {
// EMClient.shared().roomManager?.getChatroomSpecificationFromServer(withId: roomID, fetchMembers: true, completion: { emChatRoom, err in
// printLog(emChatRoom)
// if let err = err {
//
// } else {
//
// }
// })
//
//
// EMClient.shared().roomManager?.getChatroomSpecificationFromServer(withId: roomID, completion: { emChatRoom, err in
// printLog(emChatRoom)
//
// if let err = err {
// print(err)
// } else {
//
// if let roomInfo = emChatRoom {
// printLog(roomInfo.adminList)
// printLog(roomInfo.chatroomId)
// printLog(roomInfo.blacklist)
// printLog(roomInfo.memberList)
// }
//
// }
// })
//
// }
} }
...@@ -205,28 +296,38 @@ extension YHIMTestViewController: EMChatroomManagerDelegate { ...@@ -205,28 +296,38 @@ extension YHIMTestViewController: EMChatroomManagerDelegate {
printLog(aChatroom) printLog(aChatroom)
printLog(aUsername) printLog(aUsername)
printLog(ext) printLog(ext)
}
YHHUD.flash(message: "\(aChatroom) 加入聊天室了")
}
func userDidJoin(_ aChatroom: EMChatroom, user aUsername: String) { func userDidJoin(_ aChatroom: EMChatroom, user aUsername: String) {
let memberCount = aChatroom.occupantsCount let memberCount = aChatroom.occupantsCount
printLog(memberCount) printLog(memberCount)
YHHUD.flash(message: "\(aUsername) 加入 聊天室了")
} }
func userDidLeave(_ aChatroom: EMChatroom, user aUsername: String) { func userDidLeave(_ aChatroom: EMChatroom, user aUsername: String) {
let memberCount = aChatroom.occupantsCount let memberCount = aChatroom.occupantsCount
printLog(memberCount) printLog(memberCount)
YHHUD.flash(message: "\(aUsername) 离开 聊天室了")
} }
} }
extension YHIMTestViewController: EMChatManagerDelegate { extension YHIMTestViewController: EMChatManagerDelegate {
//收到消息 //收到消息
func messagesDidReceive(_ aMessages: [EMChatMessage]) { func messagesDidReceive(_ aMessages: [EMChatMessage]) {
for(i,t) in aMessages.enumerated() { for(i,t) in aMessages.enumerated() {
printLog(t) printLog(t.ext)
var nickName : String = ""
if let ext = t.ext {
nickName = ext["fromNickName"] as? String ?? "YinHe"
}
if let body = t.body as? EMTextMessageBody,body.type == .text {
printLog(body.text)
YHHUD.flash(message: "\(nickName) : \(body.text)")
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment