22using  System . Collections ; 
33using  System ; 
44using  System . Collections . Generic ; 
5- namespace  Lockstep  { 
6-  public  class  TestHelper  :  BehaviourHelper {  
7-  protected  override  void  OnLateInitialize  ( )  { 
8-  ClientManager . NetworkHelper . OnTestData  +=  HandleOnTestData ; 
9-  } 
10-  Dictionary < int , List < int > >  frameHashes  =  new  Dictionary < int ,  List < int > > ( ) ; 
11-  void  HandleOnTestData  ( byte [ ]  obj )  { 
12-  int  frame  =  BitConverter . ToInt32  ( obj ,  0 ) ; 
13-  int  pos  =  4 ; 
14-  List < int >  hashes  =  new  List < int > ( ) ; 
15-  while  ( pos  <  obj . Length  -  ( sizeof ( int )  -  1 ) )  { 
16-  int  hash  =  BitConverter . ToInt32  ( obj ,  pos ) ; 
17-  hashes . Add  ( hash ) ; 
18-  pos  +=  sizeof  ( int ) ; 
19-  } 
20-  if  ( frameHashes . ContainsKey  ( frame ) )  { 
21-  frameHashes [ frame ] . AddRange  ( hashes ) ; 
22-  } 
23-  else  { 
24-  frameHashes . Add  ( frame , hashes ) ; 
25-  } 
265
6+ namespace  Lockstep 
7+ { 
8+ public  class  TestHelper  :  BehaviourHelper 
9+ { 
10+ [ SerializeField ] 
11+ private  int  _checkFrameInterval  =  4 ; 
12+ int  ticker ; 
2713
28-  } 
29-  private  int  lastFrameSent ; 
30-  protected  override  void  OnSimulate  ( )  { 
31-  List < int >  hashes ; 
32-  if  ( frameHashes . TryGetValue  ( LockstepManager . FrameCount  -  10 ,  out  hashes ) )  { 
33-  int  mainHash  =  hashes [ 0 ] ; 
34-  bool  desynced  =  false ; 
35-  for  ( int  i  =  1 ;  i  <  hashes . Count ;  i ++ )  { 
36-  if  ( mainHash  !=  hashes [ i ] )  { 
37-  desynced  =  true ; 
38-  } 
39-  } 
40-  if  ( desynced )  { 
41-  Debug . LogError  ( "DESYCNED" ) ; 
42-  } 
43-  } 
44-  if  ( LockstepManager . FrameCount  >  lastFrameSent )  { 
45-  List < byte >  newMessage  =  new  List < byte > ( ) ; 
46-  newMessage . AddRange  ( BitConverter . GetBytes  ( LockstepManager . FrameCount ) ) ; 
47-  newMessage . AddRange  ( BitConverter . GetBytes  ( LockstepManager . GetStateHash ( ) ) ) ; 
48-  if  ( ClientManager . NetworkHelper . IsServer )  { 
49-  ClientManager . NetworkHelper . SendMessageToAll  ( MessageType . Test ,  newMessage . ToArray  ( ) ) ; 
50-  } 
51-  { 
52-  List < int >  newHashes  =  new  List < int > ( ) ; 
53-  newHashes . Add  ( LockstepManager . GetStateHash  ( ) ) ; 
54-  if  ( frameHashes . ContainsKey ( LockstepManager . FrameCount ) )  { 
55-  frameHashes [ LockstepManager . FrameCount ] . AddRange  ( newHashes ) ; 
56-  } 
57-  else  { 
58-  frameHashes . Add  ( LockstepManager . FrameCount , newHashes ) ; 
59-  } 
60-  } 
61-  lastFrameSent  =  LockstepManager . FrameCount ; 
62-  } 
63-  } 
64-  } 
14+ protected  override  void  OnLateInitialize  ( ) 
15+ { 
16+ ClientManager . NetworkHelper . OnTestData  +=  HandleOnTestData ; 
17+ ticker  =  0 ; 
18+ } 
19+ 
20+ Dictionary < int , List < int > >  frameHashes  =  new  Dictionary < int ,  List < int > >  ( ) ; 
21+ 
22+ void  HandleOnTestData  ( byte [ ]  obj ) 
23+ { 
24+ int  frame  =  BitConverter . ToInt32  ( obj ,  0 ) ; 
25+ int  pos  =  4 ; 
26+ List < int >  hashes  =  new  List < int >  ( ) ; 
27+ while  ( pos  <  obj . Length  -  ( sizeof ( int )  -  1 ) )  { 
28+ int  hash  =  BitConverter . ToInt32  ( obj ,  pos ) ; 
29+ hashes . Add  ( hash ) ; 
30+ pos  +=  sizeof ( int ) ; 
31+ } 
32+ if  ( frameHashes . ContainsKey  ( frame ) )  { 
33+ frameHashes  [ frame ] . AddRange  ( hashes ) ; 
34+ }  else  { 
35+ frameHashes . Add  ( frame ,  hashes ) ; 
36+ } 
37+ 
38+ 
39+ } 
40+ 
41+ private  int  lastFrameSent ; 
42+ 
43+ protected  override  void  OnSimulate  ( ) 
44+ { 
45+ ticker ++ ; 
46+ if  ( ticker  >=  _checkFrameInterval )  { 
47+ ticker  =  0 ; 
48+ List < int >  hashes ; 
49+ if  ( frameHashes . TryGetValue  ( LockstepManager . FrameCount  -  10 ,  out  hashes ) )  { 
50+ int  mainHash  =  hashes  [ 0 ] ; 
51+ bool  desynced  =  false ; 
52+ for  ( int  i  =  1 ;  i  <  hashes . Count ;  i ++ )  { 
53+ if  ( mainHash  !=  hashes  [ i ] )  { 
54+ desynced  =  true ; 
55+ } 
56+ } 
57+ if  ( desynced )  { 
58+ Debug . LogError  ( "DESYCNED" ) ; 
59+ } 
60+ } 
61+ if  ( LockstepManager . FrameCount  >  lastFrameSent )  { 
62+ List < byte >  newMessage  =  new  List < byte >  ( ) ; 
63+ newMessage . AddRange  ( BitConverter . GetBytes  ( LockstepManager . FrameCount ) ) ; 
64+ newMessage . AddRange  ( BitConverter . GetBytes  ( LockstepManager . GetStateHash  ( ) ) ) ; 
65+ if  ( ClientManager . NetworkHelper . IsServer )  { 
66+ ClientManager . NetworkHelper . SendMessageToAll  ( MessageType . Test ,  newMessage . ToArray  ( ) ) ; 
67+ } 
68+ { 
69+ List < int >  newHashes  =  new  List < int >  ( ) ; 
70+ newHashes . Add  ( LockstepManager . GetStateHash  ( ) ) ; 
71+ if  ( frameHashes . ContainsKey  ( LockstepManager . FrameCount ) )  { 
72+ frameHashes  [ LockstepManager . FrameCount ] . AddRange  ( newHashes ) ; 
73+ }  else  { 
74+ frameHashes . Add  ( LockstepManager . FrameCount ,  newHashes ) ; 
75+ } 
76+ } 
77+ lastFrameSent  =  LockstepManager . FrameCount ; 
78+ } 
79+ } 
80+ } 
81+ } 
6582} 
0 commit comments