/// <summary>
        /// Indicates that a plugin should not be loaded by the DarkRift server.
        /// </summary>
        /// <param name="type">The type of plugin to exclude.</param>
        /// <returns>The configuration builder to continue construction.</returns>
        public DarkRiftServerConfigurationBuilder ExceptPlugin(string type)
        {
            ServerSpawnData.PluginsSettings.PluginSettings pluginSettings = new ServerSpawnData.PluginsSettings.PluginSettings
            {
                Type = type,
                Load = false
            };

            ServerSpawnData.Plugins.Plugins.Add(pluginSettings);

            return(this);
        }
        /// <summary>
        /// Configures a plugin on the DarkRift server.
        /// </summary>
        /// <param name="type">The type of plugin.</param>
        /// <param name="settings">The settings to pass to the plugin.</param>
        /// <returns>The configuration builder to continue construction.</returns>
        public DarkRiftServerConfigurationBuilder AddPlugin(string type, NameValueCollection settings)
        {
            ServerSpawnData.PluginsSettings.PluginSettings pluginSettings = new ServerSpawnData.PluginsSettings.PluginSettings
            {
                Type = type,
                Load = true
            };

            foreach (string key in settings.AllKeys)
            {
                pluginSettings.Settings[key] = settings[key];
            }

            ServerSpawnData.Plugins.Plugins.Add(pluginSettings);

            return(this);
        }
示例#3
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            EditorGUILayout.PropertyField(createOnEnable);

            //Alert to changes when this is unticked!
            bool old = eventsFromDispatcher.boolValue;

            EditorGUILayout.PropertyField(eventsFromDispatcher);

            if (eventsFromDispatcher.boolValue != old && !eventsFromDispatcher.boolValue)
            {
                eventsFromDispatcher.boolValue = !EditorUtility.DisplayDialog(
                    "Danger!",
                    "Unchecking " + eventsFromDispatcher.displayName + " will cause DarkRift to fire events from the .NET thread pool, unless you are confident using multithreading with Unity you should not disable this. Are you 100% sure you want to proceed?",
                    "Yes",
                    "No (Save me!)"
                    );
            }

            if (showServer = EditorGUILayout.Foldout(showServer, "Server Setttings"))
            {
                EditorGUI.indentLevel++;

                //Display IP address
                address = EditorGUILayout.TextField(new GUIContent("Address", "The address the client will connect to."), address);

                try
                {
                    server.Address = IPAddress.Parse(address);
                }
                catch (FormatException)
                {
                    EditorGUILayout.HelpBox("Invalid IP address.", MessageType.Error);
                }

                EditorGUILayout.PropertyField(port);

                //Draw IP versions manually else it gets formatted as "Ip Version" and "I Pv4" -_-
                ipVersion.enumValueIndex = EditorGUILayout.Popup(new GUIContent("IP Version", "The IP protocol version the server will listen on."), ipVersion.enumValueIndex, Array.ConvertAll(ipVersion.enumNames, i => new GUIContent(i)));

                EditorGUILayout.PropertyField(maxStrikes);

                EditorGUI.indentLevel--;
            }

            if (showData = EditorGUILayout.Foldout(showData, "Data Setttings"))
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.PropertyField(dataDirectory);

                EditorGUI.indentLevel--;
            }

            if (showLogging = EditorGUILayout.Foldout(showLogging, "Logging Setttings"))
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.PropertyField(logToFile);

                EditorGUI.indentLevel++;
                if (logToFile.boolValue)
                {
                    EditorGUILayout.PropertyField(logFileString);
                }
                EditorGUI.indentLevel--;

                EditorGUILayout.PropertyField(logToUnityConsole);

                EditorGUILayout.PropertyField(logToDebug);

                EditorGUI.indentLevel--;
            }

            //Draw plugins list
            if (showPlugins = EditorGUILayout.Foldout(showPlugins, "Plugin Setttings"))
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.PropertyField(loadByDefault);

                IEnumerable <Type> types = UnityServerHelper.SearchForPlugins();

                foreach (Type type in types)
                {
                    ServerSpawnData.PluginsSettings.PluginSettings plugin = server.Plugins.SingleOrDefault(p => p.Type == type.Name);

                    if (plugin == null)
                    {
                        plugin = new ServerSpawnData.PluginsSettings.PluginSettings
                        {
                            Type = type.Name,
                            Load = true
                        };

                        server.Plugins.Add(plugin);
                    }

                    EditorGUILayout.HelpBox("The following are plugins in your project, tick those to be loaded.", MessageType.Info);

                    plugin.Load = EditorGUILayout.Toggle(type.Name, plugin.Load);

                    EditorGUILayout.Space();
                }

                EditorGUI.indentLevel--;
            }

            //Draw databases manually
            if (showDatabases = EditorGUILayout.Foldout(showDatabases, "Databases"))
            {
                EditorGUI.indentLevel++;
                for (int i = 0; i < server.Databases.Count; i++)
                {
                    ServerSpawnData.DatabaseSettings.DatabaseConnectionData database = server.Databases[i];

                    database.Name = EditorGUILayout.TextField("Name", database.Name);

                    database.ConnectionString = EditorGUILayout.TextField("Connection String", database.ConnectionString);

                    Rect removeRect = EditorGUI.IndentedRect(EditorGUILayout.GetControlRect());        //So indent level affects the button
                    if (GUI.Button(removeRect, "Remove"))
                    {
                        server.Databases.Remove(database);
                        i--;
                    }

                    EditorGUILayout.Space();
                }

                Rect addRect = EditorGUI.IndentedRect(EditorGUILayout.GetControlRect(true));
                if (GUI.Button(addRect, "Add Database"))
                {
                    server.Databases.Add(new ServerSpawnData.DatabaseSettings.DatabaseConnectionData("NewDatabase", "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;"));
                }

                EditorGUI.indentLevel--;
            }

            if (showCache = EditorGUILayout.Foldout(showCache, "Cache"))
            {
                EditorGUILayout.PropertyField(maxCachedWriters);
                EditorGUILayout.PropertyField(maxCachedReaders);
                EditorGUILayout.PropertyField(maxCachedMessages);
                EditorGUILayout.PropertyField(maxCachedSocketAsyncEventArgs);
                EditorGUILayout.PropertyField(maxCachedActionDispatcherTasks);
            }

            serializedObject.ApplyModifiedProperties();
        }