2008-11-22 51 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

我認爲消息有可能被丟棄,或者以不同的順序到達。所以,如果你不說自己是自來水還是自來水,那麼切換就有可能被拋棄。