private void _network_MessageRecieved(RemoteSim sim, object[] messages)
        {
            foreach (var message in messages)
            {
                switch (message)
                {
                case EntityAdded added:
                    ProcessEntityAdded(added);
                    break;

                case EntityRemoved removed:
                    RemoveEntityInternal(removed.EntityId);
                    break;

                case EntityMessage <DeltaEnvelope> delta:
                    if (_entities.ContainsKey(delta.EntityId))
                    {
                        var entity = _entities[delta.EntityId];
                        entity.RecieveDeltas(delta.Message);
                    }
                    break;

                case EntityMessage <FrameCommands> cmd:
                    if (!_recievedFrameRecords.ContainsKey(cmd.Message.SentTimestamp))
                    {
                        _recievedFrameRecords.Add(cmd.Message.SentTimestamp, new List <EntityMessage <FrameCommands> >());
                    }
                    _recievedFrameRecords[cmd.Message.SentTimestamp].Add(cmd);
                    break;
                }
            }
        }
 private void _network_PeerDisconnected(RemoteSim sim)
 {
     if (sim.Role == InstanceRole.OWNER)
     {
         OwnerSimDisconnecting?.Invoke(_ownerSim);
         _ownerSim = null;
     }
     else
     {
         ClientSimDisconnecting?.Invoke(sim);
         _clientSims.Remove(sim);
     }
 }
 private void _network_PeerConnected(RemoteSim sim)
 {
     if (sim.Role == InstanceRole.OWNER)
     {
         _ownerSim = sim;
         OwnerSimConnected?.Invoke(_ownerSim);
     }
     else
     {
         _clientSims.Add(sim);
         ClientSimConnected?.Invoke(sim);
     }
 }