Exemple #1
0
        private async Task ChannelUpdates(object channelIndexObject)
        {
            int       channel = (int)channelIndexObject;
            Stopwatch sw      = new Stopwatch();
            Stopwatch sw2     = new Stopwatch();

            while (true)
            {
                sw.Restart();
                using (var cpd = await channelPlayerData.WaitAsync())
                {
                    sw2.Restart();
                    int count = Math.Max(1, cpd.Value[channel].Count);
                    Parallel.ForEach(cpd.Value[channel], new ParallelOptions {
                        MaxDegreeOfParallelism = count
                    }, player => {
                        foreach (var otherPlayer in cpd.Value[channel])
                        {
                            PlayerTelemetry t = otherPlayer.playerData.telemetry;
                            t.pid             = otherPlayer.playerData.id;
                            player.client.QueueSend(new NetworkDataTelemetry(t));
                        }
                    });
                    Console.WriteLine($"frame time {sw2.ElapsedMilliseconds} ms, players {cpd.Value[channel].Count}");
                }
                //Console.WriteLine($"server fps {1000.0f/(sw.ElapsedMilliseconds==0?1:sw.ElapsedMilliseconds)}");
                await Task.Delay((int)Math.Max(20f, tickTime - sw.ElapsedMilliseconds));
            }
        }
 public NetworkDataTelemetry(PlayerTelemetry pt) : base(8 * 4, NetworkCode.Telemetry)
 {
     this.pid = pt.pid;
     this.px  = pt.px;
     this.py  = pt.py;
     this.pz  = pt.pz;
     this.qx  = pt.qx;
     this.qy  = pt.qy;
     this.qz  = pt.qz;
     this.qw  = pt.qw;
 }
Exemple #3
0
        protected override NetworkData ParseData(byte[] data)
        {
            PlayerTelemetry pt = new PlayerTelemetry();
            string          name;
            int             channel;
            int             index = ReadInt(data, 0, out pt.pid);

            index = ReadInt(data, index, out channel);
            index = ReadString(data, index, out name);
            index = ReadFloat(data, index, out pt.px);
            index = ReadFloat(data, index, out pt.py);
            index = ReadFloat(data, index, out pt.pz);
            index = ReadFloat(data, index, out pt.qx);
            index = ReadFloat(data, index, out pt.qy);
            index = ReadFloat(data, index, out pt.qz);
            index = ReadFloat(data, index, out pt.qw);
            return(new NetworkDataPlayerInfo(new PlayerData()
            {
                channel = channel, id = pt.pid, name = name, telemetry = pt
            }));
        }