public void OnInfoCommand(Commands.Info info, NetPeer peer)
        {
            Debug.Assert(MasterState == State.Connecting);
            var client = Clients.Find(c => c.Peer == peer);

            Debug.Assert(client != null);
            Debug.Assert(client.State == State.Connecting);

            Debug.Log($"NET: Client connected from {peer.EndPoint}");

            Debug.Log($"NET: Client version = {info.Version}");
            Debug.Log($"NET: Client Unity version = {info.UnityVersion}");
            Debug.Log($"NET: Client OS = {info.OperatingSystem}");

            client.State = State.Connected;

            var sim = Loader.Instance.SimConfig;

            if (!sim.ApiOnly)
            {
                if (Clients.All(c => c.State == State.Connected))
                {
                    var load = new Commands.Load()
                    {
                        Name        = sim.Name,
                        MapName     = sim.MapName,
                        MapUrl      = sim.MapUrl,
                        ApiOnly     = sim.ApiOnly,
                        Headless    = sim.Headless,
                        Interactive = sim.Interactive,
                        TimeOfDay   = sim.TimeOfDay.ToString("o", CultureInfo.InvariantCulture),
                        Rain        = sim.Rain,
                        Fog         = sim.Fog,
                        Wetness     = sim.Wetness,
                        Cloudiness  = sim.Cloudiness,
                        Agents      = Simulation.Agents.Select(a => new Commands.LoadAgent()
                        {
                            Name       = a.Name,
                            Url        = a.Url,
                            Bridge     = a.Bridge == null ? string.Empty : a.Bridge.Name,
                            Connection = a.Connection,
                            Sensors    = a.Sensors,
                        }).ToArray(),
                        UseTraffic     = Simulation.UseTraffic,
                        UsePedestrians = Simulation.UsePedestrians,
                    };

                    foreach (var c in Clients)
                    {
                        Packets.Send(c.Peer, load, DeliveryMethod.ReliableOrdered);
                        c.State = State.Loading;
                    }

                    MasterState = State.Loading;
                }
            }
        }
Beispiel #2
0
        public void OnPeerConnected(NetPeer peer)
        {
            Debug.Assert(ClientState == State.Initial);
            Master = peer;

            Debug.Log($"Master {peer.EndPoint} connected");

            var info = new Commands.Info()
            {
                Version         = "todo",
                UnityVersion    = Application.unityVersion,
                OperatingSystem = SystemInfo.operatingSystemFamily.ToString(),
            };

            Packets.Send(Master, info, DeliveryMethod.ReliableOrdered);

            ClientState = State.Connected;
        }