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