@@ -19,53 +19,132 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
1919
2020using System ;
2121using System . Diagnostics ;
22+ using System . Runtime . CompilerServices ;
2223
23- namespace Lidgren . Network
24+ namespace Lidgren . Network ;
25+
26+ public partial class NetPeer
2427{
25- public partial class NetPeer
26- {
27- internal event Action < NetIncomingMessageType , string > ? LogEvent ;
28+ internal event Action < NetIncomingMessageType , string > ? LogEvent ;
2829
29- [ Conditional ( "DEBUG" ) ]
30- internal void LogVerbose ( string message )
31- {
30+ [ Conditional ( "DEBUG" ) ]
31+ internal void LogVerbose ( string message )
32+ {
3233#if __ANDROID__
33- Android . Util . Log . WriteLine ( Android . Util . LogPriority . Verbose , "" , message ) ;
34+ Android . Util . Log . WriteLine ( Android . Util . LogPriority . Verbose , "" , message ) ;
3435#endif
35- SendLogBase ( NetIncomingMessageType . VerboseDebugMessage , message ) ;
36- }
36+ SendLogBase ( NetIncomingMessageType . VerboseDebugMessage , message ) ;
37+ }
3738
38- [ Conditional ( "DEBUG" ) ]
39- internal void LogDebug ( string message )
40- {
39+ [ Conditional ( "DEBUG" ) ]
40+ internal void LogDebug ( string message )
41+ {
4142#if __ANDROID__
42- Android . Util . Log . WriteLine ( Android . Util . LogPriority . Debug , "" , message ) ;
43+ Android . Util . Log . WriteLine ( Android . Util . LogPriority . Debug , "" , message ) ;
4344#endif
44- SendLogBase ( NetIncomingMessageType . DebugMessage , message ) ;
45- }
45+ SendLogBase ( NetIncomingMessageType . DebugMessage , message ) ;
46+ }
4647
47- internal void LogWarning ( string message )
48- {
48+ internal void LogWarning ( string message )
49+ {
4950#if __ANDROID__
50- Android . Util . Log . WriteLine ( Android . Util . LogPriority . Warn , "" , message ) ;
51+ Android . Util . Log . WriteLine ( Android . Util . LogPriority . Warn , "" , message ) ;
5152#endif
52- SendLogBase ( NetIncomingMessageType . WarningMessage , message ) ;
53- }
53+ SendLogBase ( NetIncomingMessageType . WarningMessage , message ) ;
54+ }
5455
55- internal void LogError ( string message )
56- {
56+ internal void LogError ( string message )
57+ {
5758#if __ANDROID__
58- Android . Util . Log . WriteLine ( Android . Util . LogPriority . Error , "" , message ) ;
59+ Android . Util . Log . WriteLine ( Android . Util . LogPriority . Error , "" , message ) ;
5960#endif
60- SendLogBase ( NetIncomingMessageType . ErrorMessage , message ) ;
61+ SendLogBase ( NetIncomingMessageType . ErrorMessage , message ) ;
62+ }
63+
64+ private void SendLogBase ( NetIncomingMessageType type , string text )
65+ {
66+ LogEvent ? . Invoke ( type , text ) ;
67+
68+ if ( m_configuration . IsMessageTypeEnabled ( type ) )
69+ ReleaseMessage ( CreateIncomingMessage ( type , text ) ) ;
70+ }
71+
72+ private bool CheckLogEnabled ( NetIncomingMessageType type )
73+ {
74+ return m_configuration . IsMessageTypeEnabled ( type ) || LogEvent != null ;
75+ }
76+
77+ #if NET6_0_OR_GREATER && ! __ANDROID__
78+ // On supported TFMs, use an interpolated string handler,
79+ // so we can avoid running string formatting if a log level is disabled.
80+ internal void LogWarning ( [ InterpolatedStringHandlerArgument ( "" ) ] NetWarningLogInterpolatedStringHandler text )
81+ {
82+ SendLogBase ( NetIncomingMessageType . WarningMessage , text . Implementation ) ;
83+ }
84+
85+ internal void LogError ( [ InterpolatedStringHandlerArgument ( "" ) ] NetErrorLogInterpolatedStringHandler text )
86+ {
87+ SendLogBase ( NetIncomingMessageType . ErrorMessage , text . Implementation ) ;
88+ }
89+
90+ private void SendLogBase ( NetIncomingMessageType type , DefaultInterpolatedStringHandler text )
91+ {
92+ if ( ! CheckLogEnabled ( type ) )
93+ return ;
94+
95+ SendLogBase ( type , text . ToStringAndClear ( ) ) ;
96+ }
97+
98+ [ InterpolatedStringHandler ]
99+ internal ref struct NetErrorLogInterpolatedStringHandler
100+ {
101+ public DefaultInterpolatedStringHandler Implementation ;
102+
103+ public NetErrorLogInterpolatedStringHandler (
104+ int literalLength ,
105+ int formattedCount ,
106+ NetPeer peer ,
107+ out bool handlerIsValid )
108+ {
109+ handlerIsValid = peer . CheckLogEnabled ( NetIncomingMessageType . ErrorMessage ) ;
110+
111+ if ( handlerIsValid )
112+ Implementation = new DefaultInterpolatedStringHandler ( literalLength , formattedCount ) ;
61113 }
62114
63- private void SendLogBase ( NetIncomingMessageType type , string text )
115+ public void AppendLiteral ( string value )
116+ => Implementation . AppendLiteral ( value ) ;
117+
118+ public void AppendFormatted < T > ( T t , int alignment = 0 , string ? format = null )
119+ => Implementation . AppendFormatted ( t , alignment , format ) ;
120+
121+ public string ToStringAndClear ( ) => Implementation . ToStringAndClear ( ) ;
122+ }
123+
124+ [ InterpolatedStringHandler ]
125+ internal ref struct NetWarningLogInterpolatedStringHandler
126+ {
127+ public DefaultInterpolatedStringHandler Implementation ;
128+
129+ public NetWarningLogInterpolatedStringHandler (
130+ int literalLength ,
131+ int formattedCount ,
132+ NetPeer peer ,
133+ out bool handlerIsValid )
64134 {
65- LogEvent ? . Invoke ( type , text ) ;
135+ handlerIsValid = peer . CheckLogEnabled ( NetIncomingMessageType . WarningMessage ) ;
66136
67- if ( m_configuration . IsMessageTypeEnabled ( type ) )
68- ReleaseMessage ( CreateIncomingMessage ( type , text ) ) ;
137+ if ( handlerIsValid )
138+ Implementation = new DefaultInterpolatedStringHandler ( literalLength , formattedCount ) ;
69139 }
140+
141+ public void AppendLiteral ( string value )
142+ => Implementation . AppendLiteral ( value ) ;
143+
144+ public void AppendFormatted < T > ( T t , int alignment = 0 , string ? format = null )
145+ => Implementation . AppendFormatted ( t , alignment , format ) ;
146+
147+ public string ToStringAndClear ( ) => Implementation . ToStringAndClear ( ) ;
70148 }
71- }
149+ #endif
150+ }
0 commit comments