1010using VRage ;
1111using VRage . Collections ;
1212using VRage . Game . ModAPI ;
13+ using VRage . Network ;
1314using VRage . Utils ;
1415using Task = ParallelTasks . Task ;
1516
@@ -50,6 +51,10 @@ private static void MessageHandler(byte[] bytes)
5051 {
5152 var m = _messagePool . Get ( ) ;
5253 m . CompressedData = bytes ;
54+ #if TORCH
55+ m . SenderId = MyEventContext . Current . Sender . Value ;
56+ #endif
57+
5358 _processing . Add ( m ) ;
5459 }
5560
@@ -59,10 +64,19 @@ public static void DoProcessing()
5964 {
6065 try
6166 {
62- var m = _processing . Take ( ) ;
67+ MessageBase m ;
68+ try
69+ {
70+ m = _processing . Take ( ) ;
71+ }
72+ catch
73+ {
74+ continue ;
75+ }
76+
6377 MyLog . Default . WriteLineAndConsole ( $ "Processing message: { m . GetType ( ) . Name } ") ;
6478
65- if ( m is IncomingMessage )
79+ if ( m is IncomingMessage ) //process incoming messages
6680 {
6781 MessageBase i ;
6882 try
@@ -78,50 +92,55 @@ public static void DoProcessing()
7892 continue ;
7993 }
8094
95+ if ( TorchModCore . Debug )
96+ MyAPIGateway . Utilities . ShowMessage ( "Torch" , $ "Received message of type { i . GetType ( ) . Name } ") ;
97+
8198 if ( MyAPIGateway . Multiplayer . IsServer )
8299 i . ProcessServer ( ) ;
83100 else
84101 i . ProcessClient ( ) ;
85102 }
86- else
103+ else //process outgoing messages
87104 {
105+ if ( TorchModCore . Debug )
106+ MyAPIGateway . Utilities . ShowMessage ( "Torch" , $ "Sending message of type { m . GetType ( ) . Name } ") ;
107+
88108 var b = MyAPIGateway . Utilities . SerializeToBinary ( m ) ;
89109 m . CompressedData = MyCompression . Compress ( b ) ;
90110
91- MyAPIGateway . Utilities . InvokeOnGameThread ( ( ) =>
111+ switch ( m . TargetType )
92112 {
113+ case MessageTarget . Single :
114+ MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , m . Target ) ;
115+ break ;
116+ case MessageTarget . Server :
117+ MyAPIGateway . Multiplayer . SendMessageToServer ( NET_ID , m . CompressedData ) ;
118+ break ;
119+ case MessageTarget . AllClients :
120+ MyAPIGateway . Players . GetPlayers ( _playerCache ) ;
121+ foreach ( var p in _playerCache )
122+ {
123+ if ( p . SteamUserId == MyAPIGateway . Multiplayer . MyId )
124+ continue ;
125+ MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , p . SteamUserId ) ;
126+ }
127+
128+ break ;
129+ case MessageTarget . AllExcept :
130+ MyAPIGateway . Players . GetPlayers ( _playerCache ) ;
131+ foreach ( var p in _playerCache )
132+ {
133+ if ( p . SteamUserId == MyAPIGateway . Multiplayer . MyId || m . Ignore . Contains ( p . SteamUserId ) )
134+ continue ;
135+ MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , p . SteamUserId ) ;
136+ }
137+
138+ break ;
139+ default :
140+ throw new Exception ( ) ;
141+ }
93142
94- switch ( m . TargetType )
95- {
96- case MessageTarget . Single :
97- MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , m . Target ) ;
98- break ;
99- case MessageTarget . Server :
100- MyAPIGateway . Multiplayer . SendMessageToServer ( NET_ID , m . CompressedData ) ;
101- break ;
102- case MessageTarget . AllClients :
103- MyAPIGateway . Players . GetPlayers ( _playerCache ) ;
104- foreach ( var p in _playerCache )
105- {
106- if ( p . SteamUserId == MyAPIGateway . Multiplayer . MyId )
107- continue ;
108- MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , p . SteamUserId ) ;
109- }
110- break ;
111- case MessageTarget . AllExcept :
112- MyAPIGateway . Players . GetPlayers ( _playerCache ) ;
113- foreach ( var p in _playerCache )
114- {
115- if ( p . SteamUserId == MyAPIGateway . Multiplayer . MyId || m . Ignore . Contains ( p . SteamUserId ) )
116- continue ;
117- MyAPIGateway . Multiplayer . SendMessageTo ( NET_ID , m . CompressedData , p . SteamUserId ) ;
118- }
119- break ;
120- default :
121- throw new Exception ( ) ;
122- }
123- _playerCache . Clear ( ) ;
124- } ) ;
143+ _playerCache . Clear ( ) ;
125144 }
126145 }
127146 catch ( Exception ex )
@@ -130,7 +149,7 @@ public static void DoProcessing()
130149 }
131150 }
132151
133- MyLog . Default . WriteLineAndConsole ( "TORCH MOD: COMMUNICATION THREAD: EXIT SIGNAL RECEIVED! " ) ;
152+ MyLog . Default . WriteLineAndConsole ( "TORCH MOD: INFO: Communication thread shut down successfully! THIS IS NOT AN ERROR " ) ;
134153 //exit signal received. Clean everything and GTFO
135154 _processing ? . Dispose ( ) ;
136155 _processing = null ;
0 commit comments