/** * Subclasses must call this method when a unicast or multicast message has been received. */ public void receive(Address sender, byte[] data, int offset, int length) { if(data == null) return; // drop message from self; it has already been looped back up (https://issues.jboss.org/browse/JGRP-1765) if(Objects.equals(local_physical_addr, sender)) return; // the length of a message needs to be at least 3 bytes: version (2) and flags (1) // JGRP-2210 if(length < Global.SHORT_SIZE + Global.BYTE_SIZE) return; short version=Bits.readShort(data, offset); if(!versionMatch(version, sender)) return; offset+=Global.SHORT_SIZE; byte flags=data[offset]; offset+=Global.BYTE_SIZE; boolean is_message_list=(flags & LIST) == LIST, multicast=(flags & MULTICAST) == MULTICAST; ByteArrayDataInputStream in=new ByteArrayDataInputStream(data, offset, length); if(is_message_list) // used if message bundling is enabled handleMessageBatch(in, multicast); else handleSingleMessage(in, multicast); }
case TYPE_INT: return (T)(Integer)Bits.readInt(buffer, offset); case TYPE_LONG: return (T)(Long)Bits.readLong(buffer, offset); case TYPE_SHORT: return (T)(Short)Bits.readShort(buffer, offset); case TYPE_STRING: return (T)new String(buffer, offset, length); case TYPE_UTF_STRING:
switch(req_buf[offset]) { case REQ: short id=Bits.readShort(req_buf, 1+offset); long time=time(use_ms) - Bits.readLong(req_buf, 3+offset); byte[] rsp_buf=new byte[PAYLOAD]; id=Bits.readShort(req_buf, 1); time=time(use_ms) - Bits.readLong(req_buf, 3); senders[id].promise.setResult(true); // notify the sender of the response
/** * Subclasses must call this method when a unicast or multicast message has been received. */ public void receive(Address sender, byte[] data, int offset, int length) { if(data == null) return; // drop message from self; it has already been looped back up (https://issues.jboss.org/browse/JGRP-1765) if(Objects.equals(local_physical_addr, sender)) return; // the length of a message needs to be at least 3 bytes: version (2) and flags (1) // JGRP-2210 if(length < Global.SHORT_SIZE + Global.BYTE_SIZE) return; short version=Bits.readShort(data, offset); if(!versionMatch(version, sender)) return; offset+=Global.SHORT_SIZE; byte flags=data[offset]; offset+=Global.BYTE_SIZE; boolean is_message_list=(flags & LIST) == LIST, multicast=(flags & MULTICAST) == MULTICAST; ByteArrayDataInputStream in=new ByteArrayDataInputStream(data, offset, length); if(is_message_list) // used if message bundling is enabled handleMessageBatch(in, multicast); else handleSingleMessage(in, multicast); }
case TYPE_INT: return (T)(Integer)Bits.readInt(buffer, offset); case TYPE_LONG: return (T)(Long)Bits.readLong(buffer, offset); case TYPE_SHORT: return (T)(Short)Bits.readShort(buffer, offset); case TYPE_STRING: return (T)new String(buffer, offset, length); case TYPE_UTF_STRING:
switch(req_buf[offset]) { case REQ: short id=Bits.readShort(req_buf, 1+offset); long time=time(use_ms) - Bits.readLong(req_buf, 3+offset); byte[] rsp_buf=new byte[PAYLOAD]; id=Bits.readShort(req_buf, 1); time=time(use_ms) - Bits.readLong(req_buf, 3); senders[id].promise.setResult(true); // notify the sender of the response