Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > BestEffortMessaging
comparison LossyCom.c @ 2:b6dd31dbab8c
Receiving only messages for the current endpoint
| author | Merten Sach <msach@mailbox.tu-berlin.de> |
|---|---|
| date | Mon, 12 Mar 2012 18:35:10 +0100 |
| parents | 826448e34e80 |
| children | 5c0fb7c519d7 |
comparison
equal
deleted
inserted
replaced
| 1:618d1c003877 | 2:9863abc75bad |
|---|---|
| 82 //write msg to central exchange | 82 //write msg to central exchange |
| 83 localEndpoint->centralExchange->outboxArray[localEndpoint->endpointID] = | 83 localEndpoint->centralExchange->outboxArray[localEndpoint->endpointID] = |
| 84 msgDraft; | 84 msgDraft; |
| 85 | 85 |
| 86 localEndpoint->centralExchange->triggerCounter = triggerCopy; | 86 localEndpoint->centralExchange->triggerCounter = triggerCopy; |
| 87 //printf("send updated trigger to %d\n", triggerCopy); | |
| 87 } | 88 } |
| 88 | 89 |
| 89 void inline lossyCom__receiveMsg(lossyCom__endpoint_t* localEndpoint) | 90 void inline lossyCom__receiveMsg(lossyCom__endpoint_t* localEndpoint) |
| 90 { | 91 { |
| 91 uint16_t currentTriggerCopy; | 92 uint16_t currentTriggerCopy; |
| 92 lossyCom__endpointID_t senderEndpointID; | 93 lossyCom__endpointID_t senderEndpointID; |
| 94 lossyCom__endpointID_t receiverID; | |
| 93 lossyCom__msg_t msgCopy; | 95 lossyCom__msg_t msgCopy; |
| 94 uint16_t msgTrigger; | 96 uint16_t msgTrigger; |
| 95 lossyCom__msgBody_t msgBody; | 97 lossyCom__msgBody_t msgBody; |
| 96 | 98 |
| 97 senderEndpointID = 0; | 99 senderEndpointID = 0; |
| 98 currentTriggerCopy = localEndpoint->centralExchange->triggerCounter; | 100 currentTriggerCopy = localEndpoint->centralExchange->triggerCounter; |
| 99 | 101 |
| 100 //new message arrived if trigger counter is higher than the last time read | 102 //new message arrived if trigger counter is higher than the last time read |
| 101 while(senderEndpointID < localEndpoint->centralExchange->numEndpoints) | 103 if(currentTriggerCopy > localEndpoint->localTriggerCopy) |
| 102 { | 104 { |
| 103 if(senderEndpointID != localEndpoint->endpointID) | 105 while(senderEndpointID < localEndpoint->centralExchange->numEndpoints) |
| 104 { | 106 { |
| 105 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; | 107 if(senderEndpointID != localEndpoint->endpointID) |
| 106 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); | |
| 107 // check if the message is new (msg trigger > archived trigger) | |
| 108 // and already valid (msgTrigger <= currentTriggerCopy) | |
| 109 if(msgTrigger > localEndpoint->localTriggerCopy && | |
| 110 msgTrigger <= currentTriggerCopy) | |
| 111 { | 108 { |
| 112 //let the message handler parse the message | 109 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; |
| 113 msgBody = 0xFFFFFFFF & msgCopy; | 110 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); |
| 114 (*(localEndpoint->msgHandler))(senderEndpointID, | 111 // check if the message is new (msg trigger > archived trigger) |
| 115 msgBody, | 112 // and already valid (msgTrigger <= currentTriggerCopy) |
| 116 localEndpoint->msgHandlerData); | 113 if(msgTrigger > localEndpoint->localTriggerCopy && |
| 114 msgTrigger <= currentTriggerCopy) | |
| 115 { | |
| 116 //printf("receive search until %d \n", currentTriggerCopy); | |
| 117 //let the message handler parse the message | |
| 118 msgBody = 0xFFFFFFFF & msgCopy; | |
| 119 receiverID = 0xFFFF & (msgCopy >> ENDPOINT_ID_SHIFT); | |
| 120 //only receive broadcast and p2p for own receiverID | |
| 121 if(receiverID == BROADCAST_ID || | |
| 122 receiverID == localEndpoint->endpointID) | |
| 123 { | |
| 124 (*(localEndpoint->msgHandler))(senderEndpointID, | |
| 125 msgBody, | |
| 126 localEndpoint->msgHandlerData); | |
| 127 } | |
| 128 } | |
| 117 } | 129 } |
| 130 senderEndpointID++; | |
| 118 } | 131 } |
| 119 senderEndpointID++; | |
| 120 } | 132 } |
| 121 //save last parsed msg | 133 //save last TriggerCounter of last parsed Msg |
| 122 localEndpoint->localTriggerCopy = currentTriggerCopy; | 134 localEndpoint->localTriggerCopy = currentTriggerCopy; |
| 123 } | 135 } |
