protected virtual void DispatchPacket(MPRecvPacketContainer pc) { if (pc.packet is Packet_Basic_Instantiate) { Packet_Basic_Instantiate instantiate = pc.As <Packet_Basic_Instantiate>(); this.BindImportantFixedChannel(pc.runtimeID, instantiate.ChannelSequence); this._pendingInstantiates.Add(pc.runtimeID, instantiate.PeerType); } else if (pc.packet is Packet_Basic_Destroy) { this.RemoveMPIdentity(pc.runtimeID); } else if (this._pendingInstantiates.ContainsKey(pc.runtimeID)) { System.Type type = MPMappings.MPPeerMapping.Get(this._pendingInstantiates[pc.runtimeID]); this.CreateRemoteMPIdentity(type, pc.runtimeID, pc); this._pendingInstantiates.Remove(pc.runtimeID); } else if (pc.channel == this._peer.reliableChannel) { this._identities[pc.runtimeID].OnReliablePacket(pc); } else { BaseMPIdentity identity; if ((pc.channel == this._peer.stateUpdateChannel) && this._identities.TryGetValue(pc.runtimeID, out identity)) { identity.OnStateUpdatePacket(pc); } } }
public T InstantiateMPIdentity <T>(uint runtimeID, MPSendPacketContainer initPc) where T : BaseMPIdentity, new() { int num = this.AllocChannelSequenceForRuntimeID(runtimeID); MPSendPacketContainer pc = this.CreateSendPacket <Packet_Basic_Instantiate>(this._instantiateBuilder); Packet_Basic_Instantiate.StartPacket_Basic_Instantiate(pc.builder); Packet_Basic_Instantiate.AddPeerType(pc.builder, (byte)MPMappings.MPPeerMapping.Get(typeof(T))); Packet_Basic_Instantiate.AddChannelSequence(pc.builder, (byte)num); pc.Finish <Packet_Basic_Instantiate>(Packet_Basic_Instantiate.EndPacket_Basic_Instantiate(pc.builder)); this.SendReliableToOthers(runtimeID, pc); this.SendReliableToOthers(runtimeID, initPc); return(this.CreateMPIdentity <T>(runtimeID)); }