Bonjour写的聊天室的思路(二)——UI和logic
来源:互联网 发布:visual studio 开发js 编辑:程序博客网 时间:2024/06/04 18:28
这是第一个页面
创建新room的按钮
1.strop server browser
2.初始化LocalRoom
3.将LocalRoom(chatRoom)传值给下一个页面chatRoomViewController
4.调用chatRoomViewController的 activate
①实现chatRoom代理
(以下在LocalRoom中实现的)
②调用chatRoom start方法
1°初始化server,
2°实现server的代理(handleNewConnection:)
将新连接的connection加入NSMutableSet(clients)
3°创建server、发布service
③更新Name后面TextField的text
传出新的msg——调用chatRoom的broadcastChatMessage: fromUser:
以下在LocalRoom中实现的
1.加入delegate
[delegate displayChatMessage:message fromUser:name];
2.将字符串格式的新msg和userName包装成字典格式,然后向所有的客户端(clients)调用sendNetworkPacket:
①字典包装成NSData,计算data的length
②加入outgoingDataBuffer
[outgoingDataBuffer appendBytes:&packetLength length:sizeof(int)]; // Write body: encoded NSDictionary [outgoingDataBuffer appendData:rawPacket];
③outgoingBuffer写入Stream
在viewcontroller中调用localroom的delegate,实现displayChatMessage: fromUser:
将msg显示在TextView中
- (void)displayChatMessage:(NSString *)message fromUser:(NSString *)userName{ NSString * msg = [NSString stringWithFormat:@"%@: %@\n", userName, message]; NSLog(@" >> %@", msg); NSString * currentString = [NSString stringWithFormat:@"%@%@", [chatMsg string], msg]; [chatMsg setString:currentString]; NSRange range = [currentString rangeOfString:msg options:NSBackwardsSearch]; [chatMsg scrollRangeToVisible:range];}
- (void)roomTerminated:(id)room reason:(NSString*)reason{ NSLog(@" Room terminated:%@", reason); NSString * msg = [NSString stringWithFormat:@"Reason:%@", reason]; NSAlert * alert = [NSAlert alertWithMessageText:@"Room terminated" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:msg]; [alert runModal]; [self backToChatty:nil]; }
点击Exit Room
1.chatRoom stop
①关闭server
②对所有的客户端调用close——关闭readStream、writeStream、incomingDataBuffer、outgoingDataBuffer、netService
2.清空 textView
3.返回前一个页面(chattyViewController)
调用chattyVC的activate
1°更新UI:Name后面的TableField
2°初始化serverBrowser(设置delegate,备置进行discover的service,在serverBrowser的delegate中调用[delegate updateServiceList])
4.实现serverBrowser的updateService这个代理,更新tableView
选择JoinRoom
1.选择server去resolve
2.使用server去初始化remoteRoom
3.serviceBrowser停止
4.转跳到remoteRoom
- Bonjour写的聊天室的思路(二)——UI和logic
- Bonjour写的聊天室的思路(一)——搭建服务器
- Bonjour聊天室的总体思路
- 实现聊天室的思路 和部分代码
- 实现聊天室的思路整理
- logic:present 和 logic:empty的用法
- logic:present 和 logic:empty的用法
- logic:present 和 logic:empty的用法
- logic:present 和 logic:empty的用法
- logic:present 和 logic:empty的用法
- 关于客户端和服务端聊天室的思路和代码(主要参考传智播客讲课)
- 简单的聊天室,包含UI
- 用PHP和ACCESS写聊天室(二)
- 简易版的聊天室实现思路
- 基于PHP的聊天室(二)
- 聊天室项目(二)界面的搭建
- Sturts tag 中logic:present 和logic:empty 的区别
- Sturts tag 中logic:present 和logic:empty 的区别
- 适配器模式
- Java单例模式复习(二)
- qt creator创建cmake构建的程序,无法启动调试
- 从右到左布局(RTL Layout)
- 如何迅速秒杀掉:99%的海量数据处理面试题
- Bonjour写的聊天室的思路(二)——UI和logic
- 《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)
- poj 1904 King's Quest (SCC缩点)
- Java单例模式复习(三)
- 2015070402 - EffactiveJava笔记 - 第56条 遵守普遍命名规范(1)
- C++标准库和标准模板库
- Web App开发入门
- Android Intent Action 大全
- android 中使用View.setId(int id),如何避免id冲突呢?