MCPcopy Create free account
hub / github.com/dsg-titech/simblock / receiveMessage

Method receiveMessage

simulator/src/main/java/simblock/node/Node.java:391–443  ·  view source on GitHub ↗

Receive message. @param message the message

(AbstractMessageTask message)

Source from the content-addressed store, hash-verified

389 * @param message the message
390 */
391 public void receiveMessage(AbstractMessageTask message) {
392 Node from = message.getFrom();
393
394 if (message instanceof InvMessageTask) {
395 Block block = ((InvMessageTask) message).getBlock();
396 if (!this.orphans.contains(block) && !this.downloadingBlocks.contains(block)) {
397 if (this.consensusAlgo.isReceivedBlockValid(block, this.block)) {
398 AbstractMessageTask task = new RecMessageTask(this, from, block);
399 putTask(task);
400 downloadingBlocks.add(block);
401 } else if (!block.isOnSameChainAs(this.block)) {
402 // get new orphan block
403 AbstractMessageTask task = new RecMessageTask(this, from, block);
404 putTask(task);
405 downloadingBlocks.add(block);
406 }
407 }
408 }
409
410 if (message instanceof RecMessageTask) {
411 this.messageQue.add((RecMessageTask) message);
412 if (!sendingBlock) {
413 this.sendNextBlockMessage();
414 }
415 }
416
417 if(message instanceof GetBlockTxnMessageTask){
418 this.messageQue.add((GetBlockTxnMessageTask) message);
419 if(!sendingBlock){
420 this.sendNextBlockMessage();
421 }
422 }
423
424 if(message instanceof CmpctBlockMessageTask){
425 Block block = ((CmpctBlockMessageTask) message).getBlock();
426 Random random = new Random();
427 float CBRfailureRate = this.isChurnNode ? CBR_FAILURE_RATE_FOR_CHURN_NODE : CBR_FAILURE_RATE_FOR_CONTROL_NODE;
428 boolean success = random.nextDouble() > CBRfailureRate ? true : false;
429 if(success){
430 downloadingBlocks.remove(block);
431 this.receiveBlock(block);
432 }else{
433 AbstractMessageTask task = new GetBlockTxnMessageTask(this, from, block);
434 putTask(task);
435 }
436 }
437
438 if (message instanceof BlockMessageTask) {
439 Block block = ((BlockMessageTask) message).getBlock();
440 downloadingBlocks.remove(block);
441 this.receiveBlock(block);
442 }
443 }
444
445
446 /**

Callers 1

runMethod · 0.80

Calls 7

isOnSameChainAsMethod · 0.95
sendNextBlockMessageMethod · 0.95
receiveBlockMethod · 0.95
getFromMethod · 0.80
putTaskMethod · 0.80
getBlockMethod · 0.45
isReceivedBlockValidMethod · 0.45

Tested by

no test coverage detected