2008-11-22 55 views
0

我可以按照大多数苹果WiTap样的,但我有点难倒在发送方法的位:卓悦网络帮助在iPhone上WiTap样品

- (void) send:(const uint8_t)message 
{ 
if (_outStream && [_outStream hasSpaceAvailable]) 
    if([_outStream write:(const uint8_t *)&message maxLength:sizeof(const uint8_t)] == -1) 
     [self _showAlert:@"Failed sending data to peer"]; 
} 

- (void) activateView:(TapView*)view 
{ 
    NSLog(@"ACTIVATE TAG: %d", [view tag]); 
    //[self send:[view tag] | 0x80]; 
    [self send:[view tag]]; 
} 

- (void) deactivateView:(TapView*)view 
{ 
    NSLog(@"DEACTIVATE TAG: %d", [view tag]); 
    //[self send:[view tag] & 0x7f]; 
    [self send:[view tag]]; 

} 

请注意,我已经改变了发送:参数只是视图的标签,编号为1-9。该代码原本是按位AND和OR调整的。

为什么?

我得到的事实,发送方法需要uint8_t,但这是为什么按位的东西在那里?将一个NSInteger变成一个unint8_t?

该代码不适用于我上面的更改。它会很好地记录日志,客户端可以正常工作,但消息没有正确地从客户端发送到客户端。

有人可以用小字解释什么是按位的东西在做什么?还是我正确?

谢谢!这是我的第一个问题,所以请客气。


感谢您的回应。我仍然有点困惑。得到它?

基本上,为什么?

这只是一个令人讨厌的方式来传递标识符?这些视图中的每一个都有一个标签#,为什么不传递它,并从视图类切换状态(上/下)?

这只是一个案例:“这是谁写的人是怎么做的”,还是我失去了在拼图的关键一块,这是我怎么也应该构建我的代码。

我只是想传递一个标签#,然后有一个标签决定如何在一个清晰可读的功能不喜欢toggleUpOrDownState什么的。

按位的东西总是让我觉得愚蠢我想,除非是必要的,等等。然后我觉得自己很蠢,但设法通过某种方式反正蒙混过关。 :)

回答

3

基本上,[view tag] | 0x80正在设置该值的高位(所以00010011将变为10010011)并且[view tag] & 0x7f正在将其移除(10010011 - > 00010011)。

看看在[AppController stream:handleEvent:]方法。你会看到这个代码:

 //We received a remote tap update, forward it to the appropriate view 
    if(b & 0x80) 
     [(TapView*)[_window viewWithTag:b & 0x7f] touchDown:YES]; 
    else 
     [(TapView*)[_window viewWithTag:b] touchUp:YES]; 

因此,流的接收器正在检查该高位。

0

我相信这是为什么高阶位的是另一片从一个对等传递给其他的数据的原因。它指定该消息是用于水龙头的“开始”还是水龙头的“结束”。

基于该位,接收器或者激活点击视图或者将其停用。

所以在本质上,他们把两条信息在单一的无符号整数 - 该广场被窃听(低位),并且是在触摸开始或结束(高位)。

0

我认为消息有可能被丢弃,或者以不同的顺序到达。所以,如果你不说自己是自来水还是自来水,那么切换就有可能被抛弃。