예제 #1
0
        internal TExtension AddExtension <TExtension>()
            where TExtension : new()
        {
            var ext = new TExtension();

            return(SetExtension(ext));
        }
예제 #2
0
    public void Select (TOperation operation, TExtension extension)
    {
      CategoryType.Select (TCategory.Dummy);

      Operation = operation;
      Extension = extension;
    }
예제 #3
0
    private TExtension findReceiveBridge(ExtensionNode input)
    {
        //finds the extension that the receiveBridge belongs to

        TExtension result = null;

        int extensionCounter = 0;

        while (extensionCounter < this.terminal.extensionLength() && result == null)
        {
            int receiveCoutner = 0;
            while (receiveCoutner < this.terminal.extensionAt(extensionCounter).ReceiveNodes.Length&& result == null)
            {
                if (input.Equals(this.terminal.extensionAt(extensionCounter).ReceiveNodes[receiveCoutner]))
                {
                    result = this.terminal.extensionAt(extensionCounter);
                }

                receiveCoutner++;
            }

            extensionCounter++;
        }

        return(result);
    }
    public void saveButton()
    {
        //saves the current state of all the terminals

        string path = Application.dataPath + "/Default/Resources/Default/Saves";

        EnterTextContent saveContent = new EnterTextContent("Enter in the name for your save", (string enteredText) => {
            string illegal     = enteredText + "~" + System.DateTime.Now.ToString();
            string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
            Regex r            = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
            illegal            = r.Replace(illegal, " ");

            Save.makeDirectory(path, illegal);

            path += "/" + illegal + "/";

            string terminalFolder = "Terminals";
            Save.makeDirectory(path, terminalFolder);

            path += "/" + terminalFolder;


            foreach (TerminalController ter in this.terminalManager.TerminalControllers)
            {
                //makes terminal directory
                Save.makeDirectory(path, ter.Terminal.Name);
                string tempPath = path + "/" + ter.Terminal.Name + "/";

                //saves terminal json
                Save.saveJson <TerminalData>(new TerminalData(ter.Terminal), tempPath, ter.Terminal.Name + ".json");

                //saves the connections
                Save.saveJson <TExtensionConnectionsData>(new TExtensionConnectionsData(ter.Terminal), tempPath, typeof(TExtensionConnectionsData).ToString() + ".json");

                //makes directory for logic graphs
                Save.makeDirectory(tempPath, "LogicGraphs");
                tempPath += "/LogicGraphs";

                for (int i = 0; i < ter.Terminal.extensionLength(); i++)
                {
                    TExtension extension = ter.Terminal.extensionAt(i);
                    if (extension.GetType() == typeof(LogicChip))
                    {
                        string name = extension.Name + ".json";

                        LogicChip lg = (LogicChip)extension;
                        Save.saveJson <LogicGraphData>(new LogicGraphData(lg), tempPath, name);
                    }
                }
            }
        }, () => { }, 50);

        WindowManager.Instance.spawnWindow(new Window("Save Game", 200, 200, saveContent));
    }
        /// <summary>
        /// Allows to register an extension that executes custom code on different extension points
        /// </summary>
        /// <typeparam name="TExtension">The extension type. This type must extend <see cref="FirehawkExtension"/> type</typeparam>
        public ConventionMapConfig RegisterExtension <TExtension>() where TExtension : ConventionMapExtension
        {
            try
            {
                TExtension ext = Activator.CreateInstance <TExtension>();
                RegisterExtension(ext);
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException(string.Format(ExceptionMessages.UnableToCreateExtensionInstance, typeof(TExtension).Name), ex);
            }

            return(this);
        }
예제 #6
0
        /// <summary>
        /// Gets or creates an extension instance linked to the current <see cref="ModelContext"/>.
        /// </summary>
        /// <typeparam name="TExtension">The type of extension to create.</typeparam>
        /// <returns></returns>
        public TExtension GetExtension <TExtension>()
            where TExtension : class, new()
        {
            object extension;

            if (extensions == null)
            {
                extensions = new Dictionary <Type, object>();
            }
            if (!extensions.TryGetValue(typeof(TExtension), out extension))
            {
                extensions[typeof(TExtension)] = extension = new TExtension();
            }
            return((TExtension)extension);
        }
예제 #7
0
        internal TExtension Extend <TExtension>()
            where TExtension : new()
        {
            object extensionObj;
            var    type = typeof(TExtension);

            if ((extensions ?? (extensions = new Dictionary <Type, object>())).TryGetValue(type, out extensionObj))
            {
                return((TExtension)extensionObj);
            }

            var extension = new TExtension();

            extensions[type] = extension;
            return(extension);
        }
예제 #8
0
        internal TExtension Extend <TExtension>() where TExtension : class, new()
        {
            // TODO: (Extend) a more performant, clearer WithExtension. test and measure.
            object extensionObj;
            var    type = typeof(TExtension);

            if ((extensions ?? (extensions = new Dictionary <Type, object>())).TryGetValue(type, out extensionObj))
            {
                return(extensionObj as TExtension);
            }

            var extension = new TExtension();

            extensions[type] = extension;
            return(extension);
        }
예제 #9
0
 /// <summary>
 /// Adds an extension of type <typeparamref name="TExtension" /> to the <see cref="LogEntry"/> if extension type <typeparamref name="TExtension" /> is enabled.
 /// </summary>
 public Extension With <TExtension>()
     where TExtension : class, new()
 {
     if (Extension <TExtension> .IsEnabled)
     {
         extensionGetters.Add(
             new KeyValuePair <Type, Func <LogEntry, object> >(
                 typeof(TExtension),
                 entry =>
         {
             var extension = new TExtension();
             return(extension);
         }));
     }
     return(this);
 }
예제 #10
0
    /// <summary>
    /// Removes an Extension from the Terminal
    /// </summary>
    public bool removeExtension(TExtension extension)
    {
        bool result = true;

        /*
         * //disconnect
         * foreach (SendBridge send in extension.SendBridges) {
         *  send.clearConnections();
         * }
         * foreach (ReceiveBridge rec in extension.ReceiveBridges) {
         *  rec.clearConnections();
         * }
         */

        result = this.extensions.Remove(extension);

        this.OnExtensionRemove?.Invoke();

        return(result);
    }
예제 #11
0
    public void Invoke (IModelContext modelContext, IEntityAction entityAction, TExtension extension)
    {
      if (modelContext.NotNull ()) {
        var context = TModelContext.CastTo (modelContext);

        var relationList = context.CategoryRelation
          .ToList ()
        ;

        if (entityAction.NotNull ()) {
          var action = TEntityAction.Request (entityAction);
          action.CollectionAction.SetCollection (relationList);

          if (action.Operation.HasExtension) {
            switch (extension) {
              case TExtension.Full: {
                  CollectionFull (context, action);
                }
                break;

              case TExtension.Minimum: {
                  CollectionMinimum (context, action);
                }
                break;

              case TExtension.ById:
              case TExtension.Idle:
              case TExtension.Many:
              case TExtension.Zap: {
                  Models.Infrastructure.THelper.FormatExtensionNotImplementedException (action);
                }
                break;
            }
          }

          else {
            Models.Infrastructure.THelper.FormatExtensionMustExistException (action);
          }
        }
      }
    }
예제 #12
0
    /// <summary>
    /// Add an ExtensionConnection to InteriorConnections
    /// </summary>
    public bool addConnection(ExtensionConnection connection)
    {
        bool       result        = false;
        TExtension fromExtension = Array.Find(this.Extensions, extension => extension.Equals(connection.FromExtension));
        TExtension toExtension   = Array.Find(this.Extensions, extension => extension.Equals(connection.ToExtension));


        if (connection.FromTerminal.Equals(this) &&
            fromExtension != null &&
            Array.Exists(fromExtension.SendNodes, bridge => bridge.Equals(connection.FromNode)) &&

            connection.ToTerminal.Equals(this) &&
            toExtension != null &&
            Array.Exists(toExtension.ReceiveNodes, bridge => bridge.Equals(connection.ToNode)))
        {
            this.interiorConnections.Add(connection);
            result = true;
            this.OnConnectionAdd?.Invoke();
        }

        return(result);
    }
    public ExtensionConnection(Terminal fromTerminal, TExtension fromExtension, ExtensionNode fromNode,
                               Terminal toTerminal, TExtension toExtension, ExtensionNode toNode)
    {
        this.fromTerminal  = fromTerminal;
        this.fromExtension = fromExtension;
        this.fromNode      = fromNode;
        this.toTerminal    = toTerminal;
        this.toExtension   = toExtension;
        this.toNode        = toNode;

        if (fromNode.State == ExtensionNode.ExtensionState.RECEIVE)
        {
            throw new System.Exception("fromNode can not have a state of Receive");
        }

        if (toNode.State == ExtensionNode.ExtensionState.SEND)
        {
            throw new System.Exception("toNode can not have a state of Send");
        }

        this.fromNode.OnSetValue += updateState;
    }
예제 #14
0
    public void Invoke (IModelContext modelContext, IEntityAction entityAction, TExtension extension)
    {
      if (modelContext.NotNull ()) {
        var context = TModelContext.CastTo (modelContext);

        var relationList = context.CategoryRelation
          .ToList ()
        ;

        if (entityAction.NotNull ()) {
          var action = TEntityAction.Request (entityAction);
          action.CollectionAction.SetCollection (relationList);

          if (action.Operation.HasExtension) {
            switch (extension) {
              case TExtension.Settings: {
                  SelectSettings (context, action);
                }
                break;

              case TExtension.ById: {
                  SelectById (context, action);
                }
                break;

              case TExtension.Relation: {
                  SelectRelation (context, action);
                }
                break;

              case TExtension.Many: {
                  SelectMany (context, action);
                }
                break;

              case TExtension.Node: {
                  SelectNode (context, action);
                }
                break;

              case TExtension.Zap: {
                  SelectZap (context, action);
                }
                break;

              case TExtension.Summary: {
                  SelectSummary (context, action);
                }
                break;

              case TExtension.Idle: {
                  //SelectIdle (context, action);
                }
                break;

              case TExtension.Full: {
                  Server.Models.Infrastructure.THelper.FormatExtensionNotImplementedException (action);
                }
                break;
            }
          }

          else {
            Server.Models.Infrastructure.THelper.FormatExtensionMustExistException (action);
          }
        }
      }
    }
예제 #15
0
 public int extensionIndexOf(TExtension extension)
 {
     return(this.extensions.IndexOf(extension));
 }
예제 #16
0
 /// <summary>
 /// Adds the extension to the Terminal
 /// </summary>
 public void addExtension(TExtension extension)
 {
     this.extensions.Add(extension);
     this.OnExtensionAdd?.Invoke();
 }
예제 #17
0
 public bool IsExtension (TExtension extension)
 {
   return (Extension.Equals (extension));
 }
예제 #18
0
 public bool IsOperation (TOperation operation, TExtension extension)
 {
   return (Operation.Equals (operation) && Extension.Equals (extension));
 }