public WhitelistActionRequest( ulong sender, ListUpdateAction action, Dictionary <long, string> whitelist) : base(sender, RemoteRequestType.WHITELIST_ACTION) { Whitelist = whitelist; WhitelistAction = action; }
private static void UpdateWhitelist(object sender, NotifyCollectionChangedEventArgs e) { ListUpdateAction action = ListUpdateAction.ADD; Dictionary <long, string> scripts = new Dictionary <long, string>(); if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Reset) { foreach (var item in e.OldItems) { var script = (item as ScriptEntry); if (m_scripts.ContainsKey(script.Id)) { m_scripts.Remove(script.Id); scripts[script.Id] = script.Name; } } action = ListUpdateAction.REMOVE; } else if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Replace) { foreach (var item in e.NewItems) { var script = (item as ScriptEntry); if (script.Enabled) { m_scripts[script.Id] = script.Name; scripts[script.Id] = script.Name; } } action = ListUpdateAction.ADD; } else { return; } if (scripts.Count == 0) { return; } if (messagingReady) { var request = new WhitelistActionRequest( MyAPIGateway.Multiplayer.MyId, action, scripts); Broadcast(request); } }
// (client only) private static void ReceiveWhitelist(ListUpdateAction action, object data) { var receivedScripts = data as Dictionary <long, string>; if (receivedScripts == null) { ModLogger.Error("Received invalid whitelist data!"); return; } ModLogger.Info(string.Format("Whitelist received from server ({0} scripts):", receivedScripts.Count)); foreach (var script in receivedScripts) { if (action == ListUpdateAction.ADD) { WhitelistData.Scripts[script.Key] = script.Value; } else if (action == ListUpdateAction.REMOVE && WhitelistData.Scripts.ContainsKey(script.Key)) { WhitelistData.Scripts.Remove(script.Key); } ModLogger.Info($" [{action}] {script.Value}"); } }