Esempio n. 1
0
        static void Prefix(object __instance, MyPacketDataBitStreamBase data, CallSite site, object obj, IMyNetObject sendAs, Vector3D?position, EndpointId source, ref ProfilerToken?__localProfilerHandle)
        {
            if (!MethodIndices.TryGetValue(site.Id, out var methodIndex))
            {
                var methodName = $"{Type.FullName}#OnEvent_{site.MethodInfo.Name}";
                methodIndex = StringIndexer.Instance.IndexOf(methodName);
                MethodIndices.Add(site.Id, methodIndex);
            }

            __localProfilerHandle = ProfilerPatch.StartToken(__instance, methodIndex, Category);
        }
        /// <summary>
        /// Replaces some truly awful Keencode that involves a handful of branches and callvirt
        /// for *each byte* in the byte array. This is at least a 5x improvement in tests.
        /// </summary>
        /// <param name="worldData"></param>
        /// <param name="sendTo"></param>
        private static void SendWorld(byte[] worldData, EndpointId sendTo)
        {
            IReplicationServerCallback callback = _getCallback((MyReplicationServer)MyMultiplayer.Static.ReplicationLayer);
            MyPacketDataBitStreamBase  data     = callback.GetBitStreamPacketData();

            data.Stream.WriteVariant((uint)worldData.Length);
            for (var i = 0; i < worldData.Length; i++)
            {
                data.Stream.WriteByte(worldData[i]);
            }
            callback.SendWorld(data, sendTo);
        }
Esempio n. 3
0
        private void OnReplicationCreate(MyPacket packet)
        {
            packet.BitStream.ReadTypeId();
            NetworkId networkId = packet.BitStream.ReadNetworkId();
            MyPacketDataBitStreamBase bitStreamPacketData = MyNetworkWriter.GetBitStreamPacketData();

            bitStreamPacketData.Stream.WriteNetworkId(networkId);
            bitStreamPacketData.Stream.WriteBool(true);
            bitStreamPacketData.Stream.Terminate();
            this.SendReplicableReady(bitStreamPacketData);
            packet.Return();
        }
Esempio n. 4
0
        private void SendUpdate()
        {
            MyPacketDataBitStreamBase bitStreamPacketData = MyNetworkWriter.GetBitStreamPacketData();
            BitStream stream = bitStreamPacketData.Stream;

            stream.WriteByte(this.m_lastStateSyncPacketId, 8);
            stream.WriteByte((byte)this.m_acks.Count, 8);
            foreach (byte num2 in this.m_acks)
            {
                stream.WriteByte(num2, 8);
            }
            stream.Terminate();
            this.m_acks.Clear();
            this.SendClientAcks(bitStreamPacketData);
            bitStreamPacketData = MyNetworkWriter.GetBitStreamPacketData();
            stream = bitStreamPacketData.Stream;
            this.m_clientPacketId = (byte)(this.m_clientPacketId + 1);
            stream.WriteByte(this.m_clientPacketId, 8);
            stream.WriteDouble(MyTimeSpan.FromTicks(Stopwatch.GetTimestamp()).Milliseconds);
            stream.WriteDouble(0.0);
            this.m_clientState.Serialize(stream, false);
            stream.Terminate();
            this.SendClientUpdate(bitStreamPacketData);
        }
Esempio n. 5
0
 void IReplicationClientCallback.SendClientReady(MyPacketDataBitStreamBase data)
 {
     Sync.Layer.TransportLayer.SendMessage(MyMessageId.CLIENT_READY, data, true, new EndpointId(Sync.ServerId), 0);
 }