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






0 0