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    }