public override ExecuteResult Execute(Space space) { if (!IsSuccess(_expression.Execute(space))) { ErrorLogger.LogRuntimeError(ErrorRuntimeCode.Echo, "The parameter expression execute failed!"); return ExecuteResult.Failed; } var value = _expression.value; System0.Echo(ValueTool.ToString(value)); return ExecuteResult.Successed; }
private BuiltInFunction() { Action <string, int, Func <List <Value>, Space, Value> > _Emplace = (string name, int paramSize, Func <List <Value>, Space, Value> func) => { var value = new ValueFunction(paramSize, func); var variable = new Variable(name, VariableAttribute.Const, value); variables.Add(name, variable); }; // print _Emplace.Invoke("print", 1, (List <Value> args, Space s) => { string ret = ""; foreach (var arg in args) { ret += ValueTool.ToString(arg); } System0.Echo(ret); return(ValueNull.DEFAULT_VALUE); }); // type _Emplace("type", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } return(new ValueString(ValueTool.ToTypeString(args[0]))); }); // is_null _Emplace("is_null", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsNull(arg); } return(new ValueBool(ret)); }); // is_number _Emplace("is_number", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsNumber(arg); } return(new ValueBool(ret)); }); // is_bool _Emplace("is_bool", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsBool(arg); } return(new ValueBool(ret)); }); // is_string _Emplace("is_string", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsString(arg); } return(new ValueBool(ret)); }); // is_array _Emplace("is_array", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsArray(arg); } return(new ValueBool(ret)); }); // is_function _Emplace("is_function", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsFunction(arg); } return(new ValueBool(ret)); }); // is_object _Emplace("is_object", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } bool ret = true; foreach (var arg in args) { ret &= ValueTool.IsObject(arg); } return(new ValueBool(ret)); }); // len _Emplace("len", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } var value = args[0]; if (ValueTool.IsArray(value)) { return(new ValueNumber((double)(value as ValueArray).value.Count)); } else if (ValueTool.IsString(value)) { return(new ValueNumber((double)(value as ValueString).value.Length)); } return(ValueNull.DEFAULT_VALUE); }); // to_string _Emplace("to_string", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } var value = args[0]; return(new ValueString(ValueTool.ToString(value))); }); // to_number _Emplace("to_number", 1, (List <Value> args, Space s) => { if (args.Count == 0) { return(null); } var value = args[0]; if (!ValueTool.IsString(value)) { return(null); } double ret = 0; if (!double.TryParse((value as ValueString).value, out ret)) { ret = 0; } return(new ValueNumber(ret)); }); }
public static Root CreateMediaStore(int factor, out System.Action[] manipulations) { var repository = new Repository(); manipulations = new System.Action[3 * factor]; var iAudioStore = new Interface() { Name = "AudioStoreInterface" }; repository.Interfaces.Add(iAudioStore); var iEncoder = new Interface() { Name = "EncoderInterface" }; repository.Interfaces.Add(iEncoder); var iAudioDB = new Interface() { Name = "AudioDBInterface" }; repository.Interfaces.Add(iAudioDB); var iUserManagement = new Interface() { Name = "UserManagementInterface" }; repository.Interfaces.Add(iUserManagement); var iUserDB = new Interface() { Name = "UserDBInterface" }; repository.Interfaces.Add(iUserDB); var iCommand = new Interface() { Name = "CommandInterface" }; repository.Interfaces.Add(iCommand); var iConnection = new Interface() { Name = "ConnectionInterface" }; repository.Interfaces.Add(iConnection); var iDataReaderInterface = new Interface() { Name = "DataReaderInterface" }; repository.Interfaces.Add(iDataReaderInterface); var http = new Interface() { Name = "HTTP" }; repository.Interfaces.Add(http); var webBrowser = new Component() { Name = "WebBrowser" }; webBrowser.RequiredInterfaces.Add(http); repository.Components.Add(webBrowser); var webForm = new Component() { Name = "WebForm" }; webForm.ProvidedInterfaces.Add(http); webForm.RequiredInterfaces.Add(iAudioStore); repository.Components.Add(webForm); var audioStore = new Component() { Name = "AudioStore" }; audioStore.ProvidedInterfaces.Add(iAudioStore); audioStore.RequiredInterfaces.Add(iAudioDB); audioStore.RequiredInterfaces.Add(iUserManagement); repository.Components.Add(audioStore); var encodingAdapter = new Component() { Name = "EncodingAdapter" }; encodingAdapter.ProvidedInterfaces.Add(iAudioDB); encodingAdapter.RequiredInterfaces.Add(iEncoder); encodingAdapter.RequiredInterfaces.Add(iAudioDB); repository.Components.Add(encodingAdapter); var oggEncoder = new Component() { Name = "OggEncoder" }; oggEncoder.ProvidedInterfaces.Add(iEncoder); repository.Components.Add(oggEncoder); var userMgmt = new Component() { Name = "UserManagement" }; userMgmt.ProvidedInterfaces.Add(iUserManagement); userMgmt.RequiredInterfaces.Add(iUserDB); repository.Components.Add(userMgmt); var dbadapter = new Component() { Name = "DBAdapter" }; dbadapter.ProvidedInterfaces.Add(iUserDB); dbadapter.ProvidedInterfaces.Add(iAudioDB); dbadapter.RequiredInterfaces.Add(iCommand); dbadapter.RequiredInterfaces.Add(iConnection); dbadapter.RequiredInterfaces.Add(iDataReaderInterface); repository.Components.Add(dbadapter); var database = new Component() { Name = "MySqlClient" }; database.ProvidedInterfaces.Add(iCommand); database.ProvidedInterfaces.Add(iConnection); database.ProvidedInterfaces.Add(iDataReaderInterface); repository.Components.Add(database); var encrypt = new Signature() { Name = "Encrypt" }; var decrypt = new Signature() { Name = "Decrypt" }; iEncoder.Signatures.Add(encrypt); iEncoder.Signatures.Add(decrypt); var upload = new Signature() { Name = "Upload" }; var download = new Signature() { Name = "Download" }; iAudioStore.Signatures.Add(upload); iAudioStore.Signatures.Add(download); oggEncoder.Services.Add(new Service() { Signature = encrypt }); oggEncoder.Services.Add(new Service() { Signature = decrypt }); audioStore.Services.Add(new Service() { Signature = upload }); audioStore.Services.Add(new Service() { Signature = download }); var environment = new Environment(); var system = new System0 { Name = "MediaStore" }; var allocation = new Allocation { AllocatedSystem = system, Environment = environment }; var isolatedContainer = new Container { Name = "IsolatedContainer" }; environment.Containers.Add(isolatedContainer); for (int i = 0; i < factor; i++) { var suffix = i.ToString(); var appServer = new Container { Name = "AppServer" + suffix }; var databaseServer = new Container { Name = "Database" + suffix }; environment.Containers.Add(appServer); environment.Containers.Add(databaseServer); var network = new Link { Name = "Network" + suffix }; network.ConnectedContainers.Add(appServer); network.ConnectedContainers.Add(databaseServer); environment.Links.Add(network); var webFormAssembly = new AssemblyContext { Name = "WebForm" + suffix, Implements = webForm }; var audioStoreAssembly = new AssemblyContext { Name = "AudioStore" + suffix, Implements = audioStore }; var encodingAdapterAssembly = new AssemblyContext { Name = "EncodingAdapter" + suffix, Implements = encodingAdapter }; var encoderAssembly = new AssemblyContext { Name = "EncodingAdapter" + suffix, Implements = encodingAdapter }; var oggEncoderAssembly = new AssemblyContext { Name = "OggEncoder" + suffix, Implements = oggEncoder }; var userMgmtAssembly = new AssemblyContext { Name = "UserMgmt" + suffix, Implements = userMgmt }; var dbAdapterAssembly = new AssemblyContext { Name = "DBAdapter" + suffix, Implements = dbadapter }; var mysqlAssembly = new AssemblyContext { Name = "MySql" + suffix, Implements = database }; system.EncapsulatedContexts.Add(webFormAssembly); system.EncapsulatedContexts.Add(audioStoreAssembly); system.EncapsulatedContexts.Add(encoderAssembly); system.EncapsulatedContexts.Add(oggEncoderAssembly); system.EncapsulatedContexts.Add(userMgmtAssembly); system.EncapsulatedContexts.Add(dbAdapterAssembly); system.EncapsulatedContexts.Add(mysqlAssembly); allocation.AllocationContexts.Add(new AllocationContext { Assembly = webFormAssembly, Container = appServer }); allocation.AllocationContexts.Add(new AllocationContext { Assembly = audioStoreAssembly, Container = appServer }); allocation.AllocationContexts.Add(new AllocationContext { Assembly = encoderAssembly, Container = appServer }); allocation.AllocationContexts.Add(new AllocationContext { Assembly = oggEncoderAssembly, Container = appServer }); allocation.AllocationContexts.Add(new AllocationContext { Assembly = userMgmtAssembly, Container = appServer }); allocation.AllocationContexts.Add(new AllocationContext { Assembly = dbAdapterAssembly, Container = appServer }); var databaseDeployment = new AllocationContext { Assembly = mysqlAssembly, Container = databaseServer }; allocation.AllocationContexts.Add(databaseDeployment); manipulations[i] = () => databaseDeployment.Container = isolatedContainer; manipulations[factor + i] = () => databaseDeployment.Container = databaseServer; manipulations[2 * factor + i] = () => network.ConnectedContainers.Remove(databaseServer); system.Connectors.Add(new AssemblyConnector { Interface = iAudioStore, ProvidingComponent = audioStoreAssembly, UsingComponent = webFormAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iUserManagement, ProvidingComponent = userMgmtAssembly, UsingComponent = audioStoreAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iEncoder, ProvidingComponent = encoderAssembly, UsingComponent = audioStoreAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iUserDB, ProvidingComponent = dbAdapterAssembly, UsingComponent = userMgmtAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iEncoder, ProvidingComponent = oggEncoderAssembly, UsingComponent = encoderAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iAudioDB, ProvidingComponent = dbAdapterAssembly, UsingComponent = encoderAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iCommand, ProvidingComponent = mysqlAssembly, UsingComponent = dbAdapterAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iConnection, ProvidingComponent = mysqlAssembly, UsingComponent = dbAdapterAssembly }); system.Connectors.Add(new AssemblyConnector { Interface = iDataReaderInterface, ProvidingComponent = mysqlAssembly, UsingComponent = dbAdapterAssembly }); } system.ProvidedInterfaces.Add(http); return(new Root { Environment = environment, System = system, Repository = repository, Allocation = allocation }); }