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; } } }
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; }