mxd 5 лет назад
Родитель
Сommit
e939488db8

+ 5 - 0
pom.xml

@@ -51,6 +51,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>commons-beanutils</groupId>
             <artifactId>commons-beanutils</artifactId>

+ 6 - 0
src/main/java/org/ssssssss/magicapi/config/MagicModule.java

@@ -0,0 +1,6 @@
+package org.ssssssss.magicapi.config;
+
+public interface MagicModule {
+
+	public String getModuleName();
+}

+ 6 - 1
src/main/java/org/ssssssss/magicapi/functions/AssertFunctions.java

@@ -1,11 +1,12 @@
 package org.ssssssss.magicapi.functions;
 
 import org.apache.commons.lang3.StringUtils;
+import org.ssssssss.magicapi.config.MagicModule;
 import org.ssssssss.script.exception.MagicScriptAssertException;
 
 import java.util.regex.Pattern;
 
-public class AssertFunctions {
+public class AssertFunctions implements MagicModule {
 
 	public static void notNull(Object value, int code, String message) {
 		if (value == null) {
@@ -38,4 +39,8 @@ public class AssertFunctions {
 	}
 
 
+	@Override
+	public String getModuleName() {
+		return "assert";
+	}
 }

+ 61 - 0
src/main/java/org/ssssssss/magicapi/functions/RedisFunctions.java

@@ -0,0 +1,61 @@
+package org.ssssssss.magicapi.functions;
+
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.ssssssss.magicapi.config.MagicModule;
+import org.ssssssss.script.functions.DynamicMethod;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class RedisFunctions extends HashMap<String, DatabaseQuery> implements MagicModule, DynamicMethod {
+
+	@Override
+	public String getModuleName() {
+		return "redis";
+	}
+
+	private StringRedisTemplate redisTemplate;
+
+	public RedisFunctions(RedisConnectionFactory connectionFactory) {
+		this.redisTemplate = new StringRedisTemplate(connectionFactory);
+	}
+
+	private byte[] serializer(Object value) {
+		if(value == null || value instanceof String){
+			return redisTemplate.getStringSerializer().serialize((String) value);
+		}
+		return serializer(value.toString());
+	}
+
+	private Object deserialize(Object value) {
+		if (value != null) {
+			if (value instanceof byte[]) {
+				return this.redisTemplate.getStringSerializer().deserialize((byte[]) value);
+			}
+			if (value instanceof List) {
+				@SuppressWarnings("unchecked")
+				List<Object> valueList = (List<Object>) value;
+				List<Object> resultList = new ArrayList<>(valueList.size());
+				for (Object val : valueList) {
+					resultList.add(deserialize(val));
+				}
+				return resultList;
+			}
+		}
+		return value;
+	}
+
+	@Override
+	public Object execute(String methodName, List<Object> parameters) {
+		return this.redisTemplate.execute((RedisCallback<Object>) connection -> {
+			byte[][] params = new byte[parameters.size()][];
+			for (int i = 0; i < params.length; i++) {
+				params[i] = serializer(parameters.get(i));
+			}
+			return deserialize(connection.execute(methodName, params));
+		});
+	}
+}

+ 1 - 3
src/main/resources/magicapi-support/monaco/language/magicscript.js

@@ -210,9 +210,7 @@ var TokenType = {
     NullLiteral: {error: 'null'},
     Identifier: {error: '标识符'}
 };
-var tokenTypeValues = Object.getOwnPropertyNames(TokenType).map(e = > TokenType[e]
-)
-;
+var tokenTypeValues = Object.getOwnPropertyNames(TokenType).map(e => TokenType[e]);
 TokenType.getSortedValues = function () {
     if (this.values) {
         return this.values;