使用swift语言和xmpp framework开发聊天软件
聊天界面经过美化,类似IOS下的短信,QQ或微信。
在Xcode 6 beta3下测试可用,同时需要xmpp客户端Adium,xmpp服务器ejabberd,搭建环境,可联合测试。
源代码:https://github.com/qq251569880/Xmpp.git
[1].[图片] 登录界面.jpg 跳至 [1] [2] [3] [4] [5] [6]
[2].[图片] 聊天界面.jpg 跳至 [1] [2] [3] [4] [5] [6]
[3].[图片] Adium登录设置.jpg 跳至 [1] [2] [3] [4] [5] [6]
[4].[图片] ejabberd服务器配置.jpg 跳至 [1] [2] [3] [4] [5] [6]
[5].[代码] 收到消息或好友状态 跳至 [1] [2] [3] [4] [5] [6]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
//收到消息
func xmppStream(sender:XMPPStream ,didReceiveMessage message:XMPPMessage? ){
if message != nil {
println(message)
var cont:String = message!.elementForName("body").stringValue();
var from:String = message!.attributeForName("from").stringValue();
var msg:Message = Message(content:cont,sender:from,ctime:getCurrentTime())
//消息委托(这个后面讲)
messageDelegate?.newMessageReceived(msg);
}
}
//收到好友状态
func xmppStream(sender:XMPPStream ,didReceivePresence presence:XMPPPresence ){
println(presence)
//取得好友状态
var presenceType:NSString = presence.type() //online/offline
//当前用户
var userId:NSString = sender.myJID.user;
//在线用户
var presenceFromUser:NSString = presence.from().user;
if (!presenceFromUser.isEqualToString(userId)) {
//在线状态
var srv:String = "macshare.local"
if (presenceType.isEqualToString("available")) {
//用户列表委托
chatDelegate?.newBuddyOnline("\(presenceFromUser)@\(srv)")
}else if (presenceType.isEqualToString("unavailable")) {
//用户列表委托
chatDelegate?.buddyWentOffline("\(presenceFromUser)@\(srv)")
}
}
}
|
[6].[代码] 发送消息 跳至 [1] [2] [3] [4] [5] [6]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
@IBAction func sendButton(sender : UIButton) {
//本地输入框中的信息
var message:String = self.MessageTextField.text
if (message != "") {
//XMPPFramework主要是通过KissXML来生成XML文件
//生成<body>文档
var body:DDXMLElement = DDXMLElement.elementWithName("body") as DDXMLElement
body.setStringValue(message)
//生成XML消息文档
var mes:DDXMLElement = DDXMLElement.elementWithName("message") as DDXMLElement
//消息类型
mes.addAttributeWithName("type",stringValue:"chat")
//发送给谁
mes.addAttributeWithName("to" ,stringValue:chatWithUser)
println("send to \(chatWithUser)")
//由谁发送
mes.addAttributeWithName("from" ,stringValue:NSUserDefaults.standardUserDefaults().stringForKey(USERID) as NSString)
//组合
mes.addChild(body)
//发送消息
self.appDelegate().sendElement(mes)
self.MessageTextField.text = ""
self.MessageTextField.resignFirstResponder()
var msg:Message = Message(content:message,sender:"you",ctime:getCurrentTime())
messages.append(msg)
println("send msg:\(messages.count)(\(msg.content),\(msg.sender))")
//重新刷新tableView
self.tView.reloadData()
}
}
|
使用swift语言和xmpp framework开发聊天软件相关推荐
- 用 Swift 语言和 SpriteKit 创建有人工智能的井字游戏
本文讲的是用 Swift 语言和 SpriteKit 创建有人工智能的井字游戏, 我对(自我)学习有着很强的热情并且非常着迷.最近,我提出了一个利用制作游戏的理论应用到应用程序开发中来提高用户体验的假 ...
- C# 语言和 .NET Framework 介绍
博主并非原创,本来出自Microsoft官方.NET学习平台,链接:点击跳转至原文链接 本文内容: 1. C#语言 2. .NET Framework平台体系结构 3. 请参阅 C#是类型安全的 ...
- swift语言和python区别_Swift为什么能成为编程语言中的黑马?
你好,这里是卖桃者说,今天跟你聊一门年轻又很受欢迎的编程语言,Swift. Swift 是苹果于 2014 年在苹果全球开发者大会(WWDC)上发布的编程语言,它可以与 Objective-C 共同运 ...
- python代码用c语言封装_树莓派开发ADC芯片CS1237(C语言和python库开发)
一.准备工作 1.安装树莓派官方系统 2.安装wiringpi库 1) sudo geit clone git://git.drogon.net/wiringPi 2) sudo apt-get in ...
- 树莓派开发ADC芯片CS1237(C语言和python库开发)
源码地址https://github.com/dyingstraw/CS1237 一.准备工作 1.安装树莓派官方系统 安装树莓派官方系统 2.安装wiringpi库 sudo apt-get ins ...
- Socket编程应用——开发聊天软件
1.客户端应用程序开发 建立一个基于对话框的MFC应用程序,创建的时候记得勾选[Windows Sockets],其 他的默认就行. (1).对话框如图所示: (2)代码如下: // ChatClie ...
- Go语言开发聊天软件
01:为什么要学这个课.mp4 02:需求分析及拆分.mp4 03:重难点之IM系统架构.mp4 04:重点难点之WebSocket怎么用.mp4 05:重点难点之优化单机性能.mp4 06:web ...
- 【软件开发之聊天软件】
这个代码是开发聊天软件使用,大家可参照代码使用. 注: 这个代码仅供参考,大家可以参照我的代码来修改 废话少说,上代码: # ----数据协议相关配置---- # ----数据协议相关配置---- f ...
- 聊聊开源聊天软件oim-fx
最近忽然要开发聊天软件,上网百度学习了一下.先是找到一些socket编程的文章.后来,在博客园找到这篇文章,得到一些启示:<超赞的8款开源聊天软件> https://blog.csdn.n ...
最新文章
- matlab 最后一列,求大神帮我解释一下matlab最后几行是什么意思
- 洛谷P1311 选择客栈
- Actor-ES框架:Ray-Handler之ToReadHandler编写
- cf1553D. Backspace
- Blah数集(信息学奥赛一本通-T1333)
- html5好看的大方框,这个样式导致HTML5的视频中的按钮变成一个方框。求解决…...
- Ubuntu下mysql可视化_ubuntu上mysql有可视化界面吗 ubuntu mysql 图形界面
- R语言实现PVAR(面板向量自回归模型)
- WinXP下搭建适合Nokia开发的J2ME环境
- 常用windows系统的100个dos命令
- Photoshop 更换证件照底色
- SAP 费用分摊分配用法(KSU5/KSV5/KB21N/KB11N)
- C语言用字母ABC输出菱形,C语言输出菱形的方法
- 创建对象和实现原型继承的几种方式
- Chromium内核的浏览器Browsers查看Chromium的版本 : navigator.userAgent
- 如何从福彩官网抓取 双色球历史数据
- python之global关键字
- 【软件开发】基于PyQt5开发的标注软件
- 斐波那契数列重要不等式证明
- 7.9模拟比赛解题报告
热门文章
- 2018年AI圈八大造假事件:罗生门此起彼伏,比娱乐圈精彩
- 惠普服务器全系列,惠普全系列四核服务器
- 投了10亿元发展“影游IP”的阿里游戏
- 阿里云全面升级计算体系结构,云业务已成为新的强劲增长点 | 数据猿采访
- 这几个图片工具请收藏好,能够解决大家拼图需求
- 2021年1月6日订阅朋友的问题与解决方案汇总
- linux虚拟机之Ubuntu基本使用(3/10)
- 从“七国八制”到“中华”脊梁
- unittest框架知识总结
- 自强学堂django学习笔记