本文整理汇总了C#中VRage.Library.Collections.BitStream.ResetRead方法的典型用法代码示例。如果您正苦于以下问题:C# BitStream.ResetRead方法的具体用法?C# BitStream.ResetRead怎么用?C# BitStream.ResetRead使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VRage.Library.Collections.BitStream
的用法示例。
在下文中一共展示了BitStream.ResetRead方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcessEvent
private void ProcessEvent( MyPacket packet )
{
if ( _networkHandlers.Count == 0 )
{
((MyReplicationLayer)MyMultiplayer.ReplicationLayer).ProcessEvent(packet);
return;
}
//magic: DO NOT TOUCH
BitStream stream = new BitStream();
stream.ResetRead( packet );
NetworkId networkId = stream.ReadNetworkId();
//this value is unused, but removing this line corrupts the rest of the stream
NetworkId blockedNetworkId = stream.ReadNetworkId();
uint eventId = (uint)stream.ReadByte();
CallSite site;
IMyNetObject sendAs;
object obj;
if ( networkId.IsInvalid ) // Static event
{
site = m_typeTable.StaticEventTable.Get( eventId );
sendAs = null;
obj = null;
}
else // Instance event
{
sendAs = ( (MyReplicationLayer)MyMultiplayer.ReplicationLayer ).GetObjectByNetworkId( networkId );
if ( sendAs == null )
{
return;
}
var typeInfo = m_typeTable.Get( sendAs.GetType() );
int eventCount = typeInfo.EventTable.Count;
if ( eventId < eventCount ) // Directly
{
obj = sendAs;
site = typeInfo.EventTable.Get( eventId );
}
else // Through proxy
{
obj = ( (IMyProxyTarget)sendAs ).Target;
typeInfo = m_typeTable.Get( obj.GetType() );
site = typeInfo.EventTable.Get( eventId - (uint)eventCount ); // Subtract max id of Proxy
}
}
#if DEBUG
if ( ExtenderOptions.IsDebugging )
{
if ( !site.MethodInfo.Name.Contains( "SyncPropertyChanged" ) && !site.MethodInfo.Name.Contains( "OnSimulationInfo" ) )
ApplicationLog.Error( $"Caught event {site.MethodInfo.Name} from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( packet.Sender.Value )}:{packet.Sender.Value}" );
}
#endif
//we're handling the network live in the game thread, this needs to go as fast as possible
bool handled = false;
Parallel.ForEach( _networkHandlers, handler =>
{
if ( handler.CanHandle( site ) )
handled |= handler.Handle( packet.Sender.Value, site, stream, obj );
} );
if ( !handled )
( (MyReplicationLayer)MyMultiplayer.ReplicationLayer ).ProcessEvent( packet );
}