001 package edu.jhu.mb.ernst.net; 002 003 import cnslab.cnsnetwork.JpvmInfo; 004 005 import jpvm.jpvmException; 006 import jpvm.jpvmMessage; 007 import jpvm.jpvmTaskId; 008 009 /*********************************************************************** 010 * Parses network message containing peer information. 011 * 012 * Created by NetHost. 013 * 014 * @version 015 * $Date: 2012-04-15 13:06:25 -0500 (Sun, 15 Apr 2012) $ 016 * $Rev: 7 $ 017 * $Author: croft $ 018 * @since 019 * 2011-07-23 020 * @author 021 * David Wallace Croft 022 ***********************************************************************/ 023 public final class PeerInfo 024 //////////////////////////////////////////////////////////////////////// 025 //////////////////////////////////////////////////////////////////////// 026 { 027 028 public final int 029 numTasks, 030 seedInt; 031 032 public final int [ ] 033 endIndices; 034 035 public final jpvmTaskId 036 parentJpvmTaskId; 037 038 public final jpvmTaskId [ ] 039 jpvmTaskIds; 040 041 public final byte [ ] 042 byteArray; 043 044 //////////////////////////////////////////////////////////////////////// 045 //////////////////////////////////////////////////////////////////////// 046 047 public PeerInfo ( final jpvmMessage message ) 048 throws jpvmException 049 //////////////////////////////////////////////////////////////////////// 050 { 051 numTasks = message.buffer.upkint ( ); 052 053 jpvmTaskIds = new jpvmTaskId [ numTasks ]; 054 055 message.buffer.unpack ( 056 jpvmTaskIds, 057 numTasks, 058 1 ); 059 060 endIndices = new int [ numTasks ]; 061 062 message.buffer.unpack ( 063 endIndices, 064 numTasks, 065 1 ); 066 067 seedInt = message.buffer.upkint ( ); 068 069 // trialHost 070 071 parentJpvmTaskId = message.buffer.upktid ( ); 072 073 final int baLength = message.buffer.upkint ( ); 074 075 byteArray = new byte [ baLength ]; 076 077 message.buffer.unpack ( byteArray, baLength, 1 ); 078 } 079 080 public PeerInfo ( 081 final byte [ ] byteArray, 082 final int [ ] endIndices, 083 final jpvmTaskId [ ] jpvmTaskIds, 084 final int numTasks, 085 final jpvmTaskId parentJpvmTaskId, 086 final int seedInt ) 087 //////////////////////////////////////////////////////////////////////// 088 { 089 this.numTasks = numTasks; 090 091 this.seedInt = seedInt; 092 093 this.endIndices = endIndices; 094 095 this.parentJpvmTaskId = parentJpvmTaskId; 096 097 this.jpvmTaskIds = jpvmTaskIds; 098 099 this.byteArray = byteArray; 100 } 101 102 //////////////////////////////////////////////////////////////////////// 103 //////////////////////////////////////////////////////////////////////// 104 105 public void populateJpvmInfo ( final JpvmInfo jpvmInfo ) 106 //////////////////////////////////////////////////////////////////////// 107 { 108 jpvmInfo.numTasks = numTasks; 109 110 jpvmInfo.tids = jpvmTaskIds; 111 112 jpvmInfo.endIndex = endIndices; 113 114 int index; 115 116 for ( index = 0; index < numTasks; index++ ) 117 { 118 if ( jpvmInfo.myJpvmTaskId.equals ( jpvmTaskIds [ index ] ) ) 119 { 120 break; 121 } 122 } 123 124 jpvmInfo.idIndex = index; 125 126 // trialHost 127 128 jpvmInfo.parentJpvmTaskId = parentJpvmTaskId; 129 130 // self id should not be stored, change to grandpa's id 131 132 jpvmInfo.tids [ index ] = jpvmInfo.jpvm.pvm_parent ( ); 133 } 134 135 //////////////////////////////////////////////////////////////////////// 136 //////////////////////////////////////////////////////////////////////// 137 }