This commit is contained in:
@@ -27,13 +27,46 @@ public class HttpSimpleRequestCoder implements MessageCoder<HttpSimpleRequest> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] encode(HttpSimpleRequest data) {
|
public byte[] encode(HttpSimpleRequest data) {
|
||||||
byte[] requestURI = data.getRequestURI() == null ? new byte[0] : data.getRequestURI().getBytes(StandardCharsets.UTF_8);
|
byte[] requestURI = MessageCoder.getBytes(data.getRequestURI()); //long-string
|
||||||
return null;
|
byte[] remoteAddr = MessageCoder.getBytes(data.getRemoteAddr());//short-string
|
||||||
|
byte[] sessionid = MessageCoder.getBytes(data.getSessionid());//short-string
|
||||||
|
byte[] headers = MessageCoder.getBytes(data.getHeaders());
|
||||||
|
byte[] params = MessageCoder.getBytes(data.getParams());
|
||||||
|
byte[] body = MessageCoder.getBytes(data.getBody());
|
||||||
|
int count = 4 + requestURI.length + 2 + remoteAddr.length + 2 + sessionid.length
|
||||||
|
+ headers.length + params.length + 4 + body.length;
|
||||||
|
byte[] bs = new byte[count];
|
||||||
|
ByteBuffer buffer = ByteBuffer.wrap(bs);
|
||||||
|
buffer.putInt(requestURI.length);
|
||||||
|
if (requestURI.length > 0) buffer.put(requestURI);
|
||||||
|
buffer.putChar((char) remoteAddr.length);
|
||||||
|
if (remoteAddr.length > 0) buffer.put(remoteAddr);
|
||||||
|
buffer.putChar((char) sessionid.length);
|
||||||
|
if (sessionid.length > 0) buffer.put(sessionid);
|
||||||
|
buffer.put(headers);
|
||||||
|
buffer.put(params);
|
||||||
|
buffer.putInt(body.length);
|
||||||
|
if (body.length > 0) buffer.put(body);
|
||||||
|
return bs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HttpSimpleRequest decode(byte[] data) {
|
public HttpSimpleRequest decode(byte[] data) {
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
if (data == null) return null;
|
||||||
|
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||||
|
HttpSimpleRequest req = new HttpSimpleRequest();
|
||||||
|
req.setRequestURI(MessageCoder.getLongString(buffer));
|
||||||
|
req.setRemoteAddr(MessageCoder.getShortString(buffer));
|
||||||
|
req.setSessionid(MessageCoder.getShortString(buffer));
|
||||||
|
req.setHeaders(MessageCoder.getMap(buffer));
|
||||||
|
req.setParams(MessageCoder.getMap(buffer));
|
||||||
|
int len = buffer.getInt();
|
||||||
|
if (len > 0) {
|
||||||
|
byte[] bs = new byte[len];
|
||||||
|
buffer.get(bs);
|
||||||
|
req.setBody(bs);
|
||||||
|
}
|
||||||
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static String getString(ByteBuffer buffer) {
|
protected static String getString(ByteBuffer buffer) {
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import java.util.*;
|
|||||||
import java.util.function.*;
|
import java.util.function.*;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.redkale.boot.*;
|
import org.redkale.boot.*;
|
||||||
import org.redkale.net.http.Rest;
|
import org.redkale.net.http.*;
|
||||||
import org.redkale.net.sncp.Sncp;
|
import org.redkale.net.sncp.Sncp;
|
||||||
import org.redkale.service.Service;
|
import org.redkale.service.Service;
|
||||||
import org.redkale.util.AnyValue;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MQ管理器
|
* MQ管理器
|
||||||
@@ -117,4 +117,5 @@ public abstract class MessageAgent {
|
|||||||
protected static String generateWebSocketRespTopic(Application application) {
|
protected static String generateWebSocketRespTopic(Application application) {
|
||||||
return "ws:resp:node" + application.getNodeid();
|
return "ws:resp:node" + application.getNodeid();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ package org.redkale.mq;
|
|||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import org.redkale.util.Utility;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将MessageRecord.content内容加解密
|
* 将MessageRecord.content内容加解密
|
||||||
@@ -26,11 +29,33 @@ public interface MessageCoder<T> {
|
|||||||
//解码
|
//解码
|
||||||
public T decode(byte[] data);
|
public T decode(byte[] data);
|
||||||
|
|
||||||
|
public static byte[] getBytes(byte[] value) {
|
||||||
|
if (value == null) return MessageRecord.EMPTY_BYTES;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
public static byte[] getBytes(String value) {
|
public static byte[] getBytes(String value) {
|
||||||
if (value == null || value.isEmpty()) return MessageRecord.EMPTY_BYTES;
|
if (value == null || value.isEmpty()) return MessageRecord.EMPTY_BYTES;
|
||||||
return value.getBytes(StandardCharsets.UTF_8);
|
return value.getBytes(StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] getBytes(final Map<String, String> map) {
|
||||||
|
if (map == null || map.isEmpty()) return new byte[2];
|
||||||
|
final AtomicInteger len = new AtomicInteger(2);
|
||||||
|
map.forEach((key, value) -> {
|
||||||
|
len.addAndGet(2 + (key == null ? 0 : Utility.encodeUTF8Length(key)));
|
||||||
|
len.addAndGet(4 + (value == null ? 0 : Utility.encodeUTF8Length(value)));
|
||||||
|
});
|
||||||
|
final byte[] bs = new byte[len.get()];
|
||||||
|
final ByteBuffer buffer = ByteBuffer.wrap(bs);
|
||||||
|
buffer.putChar((char) map.size());
|
||||||
|
map.forEach((key, value) -> {
|
||||||
|
putShortString(buffer, key);
|
||||||
|
putLongString(buffer, value);
|
||||||
|
});
|
||||||
|
return bs;
|
||||||
|
}
|
||||||
|
|
||||||
public static void putLongString(ByteBuffer buffer, String value) {
|
public static void putLongString(ByteBuffer buffer, String value) {
|
||||||
if (value == null || value.isEmpty()) {
|
if (value == null || value.isEmpty()) {
|
||||||
buffer.putInt(0);
|
buffer.putInt(0);
|
||||||
@@ -66,4 +91,14 @@ public interface MessageCoder<T> {
|
|||||||
buffer.get(bs);
|
buffer.get(bs);
|
||||||
return new String(bs, StandardCharsets.UTF_8);
|
return new String(bs, StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> getMap(ByteBuffer buffer) {
|
||||||
|
int len = buffer.getChar();
|
||||||
|
if (len == 0) return null;
|
||||||
|
Map<String, String> map = new HashMap<>(len);
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
map.put(getShortString(buffer), getLongString(buffer));
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.redkale.net.http;
|
package org.redkale.net.http;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import org.redkale.convert.ConvertColumn;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
import org.redkale.convert.json.JsonConvert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,16 +19,22 @@ import org.redkale.convert.json.JsonConvert;
|
|||||||
*/
|
*/
|
||||||
public class HttpSimpleRequest implements java.io.Serializable {
|
public class HttpSimpleRequest implements java.io.Serializable {
|
||||||
|
|
||||||
|
@ConvertColumn(index = 1)
|
||||||
protected String requestURI;
|
protected String requestURI;
|
||||||
|
|
||||||
protected String sessionid;
|
@ConvertColumn(index = 2)
|
||||||
|
|
||||||
protected String remoteAddr;
|
protected String remoteAddr;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 3)
|
||||||
|
protected String sessionid;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 4)
|
||||||
protected Map<String, String> headers;
|
protected Map<String, String> headers;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 5)
|
||||||
protected Map<String, String> params;
|
protected Map<String, String> params;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 6)
|
||||||
protected byte[] body; //对应HttpRequest.array
|
protected byte[] body; //对应HttpRequest.array
|
||||||
|
|
||||||
public HttpSimpleRequest clearParams() {
|
public HttpSimpleRequest clearParams() {
|
||||||
@@ -50,11 +57,6 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return JsonConvert.root().convertTo(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRequestURI() {
|
public String getRequestURI() {
|
||||||
return requestURI;
|
return requestURI;
|
||||||
}
|
}
|
||||||
@@ -103,4 +105,9 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
this.body = body;
|
this.body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return JsonConvert.root().convertTo(this);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user