From 67a7279f58af81c93fbd3480dd3e4516fbc275db Mon Sep 17 00:00:00 2001 From: godotg Date: Wed, 28 Sep 2022 15:36:15 +0800 Subject: [PATCH] =?UTF-8?q?test[http]:=20http=20server=E7=9A=84=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/core/http/HttpServerController.java | 48 +++++++++++++++ .../zfoo/net/core/http/HttpServerTest.java | 61 +++++++++++++++++++ .../net/packet/http/HttpHelloRequest.java | 45 ++++++++++++++ .../net/packet/http/HttpHelloResponse.java | 40 ++++++++++++ net/src/test/resources/protocol.xml | 3 + 5 files changed, 197 insertions(+) create mode 100644 net/src/test/java/com/zfoo/net/core/http/HttpServerController.java create mode 100644 net/src/test/java/com/zfoo/net/core/http/HttpServerTest.java create mode 100644 net/src/test/java/com/zfoo/net/packet/http/HttpHelloRequest.java create mode 100644 net/src/test/java/com/zfoo/net/packet/http/HttpHelloResponse.java diff --git a/net/src/test/java/com/zfoo/net/core/http/HttpServerController.java b/net/src/test/java/com/zfoo/net/core/http/HttpServerController.java new file mode 100644 index 00000000..de89574d --- /dev/null +++ b/net/src/test/java/com/zfoo/net/core/http/HttpServerController.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.net.core.http; + +import com.zfoo.net.NetContext; +import com.zfoo.net.packet.http.HttpHelloRequest; +import com.zfoo.net.packet.http.HttpHelloResponse; +import com.zfoo.net.router.attachment.HttpAttachment; +import com.zfoo.net.router.receiver.PacketReceiver; +import com.zfoo.net.session.model.Session; +import com.zfoo.protocol.util.JsonUtils; +import io.netty.handler.codec.http.HttpResponseStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author godotg + * @version 3.0 + */ +@Component +public class HttpServerController { + + private static final Logger logger = LoggerFactory.getLogger(HttpServerController.class); + + @PacketReceiver + public void atHttpHelloRequest(Session session, HttpHelloRequest request, HttpAttachment attachment) { + logger.info("receive [packet:{}] from client", JsonUtils.object2String(request)); + + var response = new HttpHelloResponse(); + response.setMessage("Hello, this is the http server!"); + + attachment.setHttpResponseStatus(HttpResponseStatus.OK); + + NetContext.getRouter().send(session, response, attachment); + } + +} diff --git a/net/src/test/java/com/zfoo/net/core/http/HttpServerTest.java b/net/src/test/java/com/zfoo/net/core/http/HttpServerTest.java new file mode 100644 index 00000000..bef4c2c9 --- /dev/null +++ b/net/src/test/java/com/zfoo/net/core/http/HttpServerTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.net.core.http; + +import com.zfoo.net.packet.http.HttpHelloRequest; +import com.zfoo.net.packet.model.DecodedPacketInfo; +import com.zfoo.net.router.attachment.HttpAttachment; +import com.zfoo.protocol.exception.RunException; +import com.zfoo.protocol.util.StringUtils; +import com.zfoo.util.ThreadUtils; +import com.zfoo.util.net.HostAndPort; +import io.netty.handler.codec.http.FullHttpRequest; +import org.junit.Ignore; +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.util.function.Function; + +/** + * @author godotg + * @version 3.0 + */ +@Ignore +public class HttpServerTest { + + /** + * 访问下面这个网址: + *

+ * http://127.0.0.1:9000/hello + */ + @Test + public void startServer() { + var context = new ClassPathXmlApplicationContext("config.xml"); + + var server = new HttpServer(HostAndPort.valueOf("127.0.0.1:9000"), new Function() { + @Override + public DecodedPacketInfo apply(FullHttpRequest fullHttpRequest) { + var uri = StringUtils.trim(fullHttpRequest.uri()); + if (uri.equals("/hello")) { + return DecodedPacketInfo.valueOf(HttpHelloRequest.valueOf("aaa"), HttpAttachment.valueOf(fullHttpRequest, null)); + } else { + throw new RunException("未知的http路径[{}]", uri); + } + } + }); + server.start(); + ThreadUtils.sleep(Long.MAX_VALUE); + } + +} diff --git a/net/src/test/java/com/zfoo/net/packet/http/HttpHelloRequest.java b/net/src/test/java/com/zfoo/net/packet/http/HttpHelloRequest.java new file mode 100644 index 00000000..709c779d --- /dev/null +++ b/net/src/test/java/com/zfoo/net/packet/http/HttpHelloRequest.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.net.packet.http; + +import com.zfoo.protocol.IPacket; + +/** + * @author godotg + * @version 3.0 + */ +public class HttpHelloRequest implements IPacket { + + public static final transient short PROTOCOL_ID = 1700; + + private String message; + + public static HttpHelloRequest valueOf(String message) { + var request = new HttpHelloRequest(); + request.message = message; + return request; + } + + @Override + public short protocolId() { + return PROTOCOL_ID; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/net/src/test/java/com/zfoo/net/packet/http/HttpHelloResponse.java b/net/src/test/java/com/zfoo/net/packet/http/HttpHelloResponse.java new file mode 100644 index 00000000..c767ed94 --- /dev/null +++ b/net/src/test/java/com/zfoo/net/packet/http/HttpHelloResponse.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.net.packet.http; + +import com.zfoo.protocol.IPacket; + +/** + * @author godotg + * @version 3.0 + */ +public class HttpHelloResponse implements IPacket { + + public static final transient short PROTOCOL_ID = 1701; + + private String message; + + + @Override + public short protocolId() { + return PROTOCOL_ID; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/net/src/test/resources/protocol.xml b/net/src/test/resources/protocol.xml index b52aa97f..ba19acac 100644 --- a/net/src/test/resources/protocol.xml +++ b/net/src/test/resources/protocol.xml @@ -73,6 +73,9 @@ + + +