package gu.dtalk.engine;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static gu.dtalk.CommonConstant.DEFAULT_IDLE_TIME_MILLS;
import static gu.dtalk.engine.DeviceUtils.DEVINFO_PROVIDER;
import static org.nanohttpd.protocols.http.response.Response.newFixedLengthResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicReference;
import org.nanohttpd.protocols.http.IHTTPSession;
import org.nanohttpd.protocols.http.NanoHTTPD;
import org.nanohttpd.protocols.http.request.Method;
import org.nanohttpd.protocols.http.response.Response;
import org.nanohttpd.protocols.http.response.Status;
import org.nanohttpd.protocols.websockets.CloseCode;
import org.nanohttpd.protocols.websockets.NanoWSD;
import org.nanohttpd.protocols.websockets.WebSocket;
import org.nanohttpd.protocols.websockets.WebSocketFrame;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import gu.dtalk.Ack;
import gu.dtalk.MenuItem;
import gu.simplemq.exceptions.SmqUnsubscribeException;
import gu.simplemq.json.BaseJsonEncoder;
import net.gdface.utils.BinaryUtils;
import static gu.dtalk.CommonConstant.*;
import static gu.dtalk.Version.*;
/**
* dtalk http 服务
* @author guyadong
*
*/
public class DtalkHttpServer extends NanoWSD {
private static final Logger logger = LoggerFactory.getLogger(DtalkHttpServer.class);
/**
* Standard HTTP header names.
*/
public static final class HeaderNames {
/**
* {@code "Accept"}
*/
public static final String ACCEPT = "Accept";
/**
* {@code "Accept-Charset"}
*/
public static final String ACCEPT_CHARSET = "Accept-Charset";
/**
* {@code "Accept-Encoding"}
*/
public static final String ACCEPT_ENCODING = "Accept-Encoding";
/**
* {@code "Accept-Language"}
*/
public static final String ACCEPT_LANGUAGE = "Accept-Language";
/**
* {@code "Accept-Ranges"}
*/
public static final String ACCEPT_RANGES = "Accept-Ranges";
/**
* {@code "Accept-Patch"}
*/
public static final String ACCEPT_PATCH = "Accept-Patch";
/**
* {@code "Access-Control-Allow-Credentials"}
*/
public static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials";
/**
* {@code "Access-Control-Allow-Headers"}
*/
public static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers";
/**
* {@code "Access-Control-Allow-Methods"}
*/
public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
/**
* {@code "Access-Control-Allow-Origin"}
*/
public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
/**
* {@code "Access-Control-Expose-Headers"}
*/
public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
/**
* {@code "Access-Control-Max-Age"}
*/
public static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age";
/**
* {@code "Access-Control-Request-Headers"}
*/
public static final String ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers";
/**
* {@code "Access-Control-Request-Method"}
*/
public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
/**
* {@code "Age"}
*/
public static final String AGE = "Age";
/**
* {@code "Allow"}
*/
public static final String ALLOW = "Allow";
/**
* {@code "Authorization"}
*/
public static final String AUTHORIZATION = "Authorization";
/**
* {@code "Cache-Control"}
*/
public static final String CACHE_CONTROL = "Cache-Control";
/**
* {@code "Connection"}
*/
public static final String CONNECTION = "Connection";
/**
* {@code "Content-Base"}
*/
public static final String CONTENT_BASE = "Content-Base";
/**
* {@code "Content-Encoding"}
*/
public static final String CONTENT_ENCODING = "Content-Encoding";
/**
* {@code "Content-Language"}
*/
public static final String CONTENT_LANGUAGE = "Content-Language";
/**
* {@code "Content-Length"}
*/
public static final String CONTENT_LENGTH = "Content-Length";
/**
* {@code "Content-Location"}
*/
public static final String CONTENT_LOCATION = "Content-Location";
/**
* {@code "Content-Transfer-Encoding"}
*/
public static final String CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding";
/**
* {@code "Content-MD5"}
*/
public static final String CONTENT_MD5 = "Content-MD5";
/**
* {@code "Content-Range"}
*/
public static final String CONTENT_RANGE = "Content-Range";
/**
* {@code "Content-Type"}
*/
public static final String CONTENT_TYPE = "Content-Type";
/**
* {@code "Cookie"}
*/
public static final String COOKIE = "Cookie";
/**
* {@code "Date"}
*/
public static final String DATE = "Date";
/**
* {@code "ETag"}
*/
public static final String ETAG = "ETag";
/**
* {@code "Expect"}
*/
public static final String EXPECT = "Expect";
/**
* {@code "Expires"}
*/
public static final String EXPIRES = "Expires";
/**
* {@code "From"}
*/
public static final String FROM = "From";
/**
* {@code "Host"}
*/
public static final String HOST = "Host";
/**
* {@code "If-Match"}
*/
public static final String IF_MATCH = "If-Match";
/**
* {@code "If-Modified-Since"}
*/
public static final String IF_MODIFIED_SINCE = "If-Modified-Since";
/**
* {@code "If-None-Match"}
*/
public static final String IF_NONE_MATCH = "If-None-Match";
/**
* {@code "If-Range"}
*/
public static final String IF_RANGE = "If-Range";
/**
* {@code "If-Unmodified-Since"}
*/
public static final String IF_UNMODIFIED_SINCE = "If-Unmodified-Since";
/**
* {@code "Last-Modified"}
*/
public static final String LAST_MODIFIED = "Last-Modified";
/**
* {@code "Location"}
*/
public static final String LOCATION = "Location";
/**
* {@code "Max-Forwards"}
*/
public static final String MAX_FORWARDS = "Max-Forwards";
/**
* {@code "Origin"}
*/
public static final String ORIG
没有合适的资源?快使用搜索试试~ 我知道了~
dtalk(Device Talk)基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)
共269个文件
java:119个
png:61个
sh:21个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 170 浏览量
2023-06-26
09:52:45
上传
评论
收藏 1.7MB ZIP 举报
温馨提示
在基于物联网的应用中,各种前端设备需要能被远程管理,当所有的设备都能直接通过ip地址访问时,设计设备管理系统时,只需要把前端设备当作一个简单的服务器就可以,比如目前大多数路由器的管理系统就是一个web服务,通过这个web服务,用户可以远程访问路由器的管理页面来对路由进行管理。但是在一些复杂的应用场景中,我们需要管理的前端设备可能运行于不同的局域网中,不一定能直接通过设备的IP地址访问,所以上述使用直接ip地址访问的方式就不能适用了。要实现在复杂网络结构中对前端设备进行管理,我们需要一个中转服务,所有的设备端/管理端都连接到这个中转服务上,通过它进行相互的通讯,进而实现对前端设备的管理。dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。同时执行结果通过发送到指定的响应消息频道,管理端侦听这个响应消息频道收到结果。
资源推荐
资源详情
资源评论
收起资源包目录
dtalk(Device Talk)基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java) (269个子文件)
activemq_console.bat 150B
activemq_demo.bat 146B
httpd_demo.bat 137B
activemq_console_debug.bat 118B
activemq_demo_debug.bat 115B
httpd_demo_debug.bat 112B
console_debug.bat 108B
demo.bat 107B
console.bat 106B
demo_debug.bat 106B
demo_debug.bat 53B
demo.bat 53B
httpd_demo_debug.bat 53B
activemq_demo.bat 53B
httpd_demo.bat 53B
activemq_demo_debug.bat 53B
activemq_console_debug.bat 42B
console_debug.bat 42B
console.bat 42B
activemq_console.bat 42B
easyui.css 70KB
color.css 6KB
common.css 3KB
icon.css 2KB
gu.simplemq.json.FastJsonInitializer 24B
loading.gif 2KB
blank.gif 43B
blank.gif 43B
.gitignore 135B
.gitignore 8B
MANUAL.html 45KB
test.html 5KB
menu.html 2KB
ws.html 2KB
index.html 708B
gu.simplemq.IMessageQueueConfigManager 39B
gu.simplemq.IMessageQueueConfigManager 33B
DtalkHttpServer.java 39KB
BaseItem.java 18KB
BaseConsole.java 13KB
BaseCmdManager.java 13KB
BaseItemEngine.java 11KB
OptionType.java 10KB
BaseOption.java 10KB
SampleConnector.java 9KB
RedisConfigType.java 9KB
CmdItem.java 9KB
BaseDispatcher.java 8KB
ActivemqConfigType.java 7KB
IAckAdapter.java 7KB
Ack.java 7KB
SampleConsoleActivemqConfig.java 7KB
DemoActivemqConfig.java 6KB
DemoMenu.java 6KB
TaskManager.java 6KB
CommonUtils.java 5KB
SampleConsoleRedisConfig.java 5KB
ItemTest.java 4KB
NumberValidator.java 4KB
ImageOption.java 4KB
OptionBuilder.java 4KB
DemoRedisConfig.java 4KB
CheckOption.java 4KB
RESTfulServe.java 3KB
DeviceInstruction.java 3KB
Demo.java 3KB
DemoConstants.java 3KB
MenuItem.java 3KB
ItemInitializer.java 3KB
DefaultCustomRedisConfigProvider.java 3KB
SampleConsoleConstants.java 3KB
DefaultLocalActivemqConfigProvider.java 3KB
CommonConstant.java 3KB
SampleConsole.java 2KB
DemoHttpdConfig.java 2KB
InteractiveCmdStartException.java 2KB
ItemEngineHttpImpl.java 2KB
ItemBuilder.java 2KB
TextRender.java 2KB
ItemEngineRedisImpl.java 2KB
CmdDispatcher.java 2KB
DemoHttpd.java 2KB
RedisConfigProvider.java 2KB
RenderEngine.java 2KB
DefaultCloudActivemqConfigProvider.java 2KB
DefaultLocalRedisConfigProvider.java 2KB
DefaultDevInfoProvider.java 2KB
SwitchOption.java 2KB
DefaultCloudRedisConfigProvider.java 2KB
BaseActivemqConfigProvider.java 2KB
Base64Option.java 1KB
OptionViewCmd.java 1KB
CmdManager.java 1KB
BaseBinary.java 1KB
GetMacTest.java 1KB
ICmdInteractiveStatusListener.java 1KB
StringOption.java 1KB
DateOption.java 1KB
MACOption.java 1KB
ImageServe.java 1KB
共 269 条
- 1
- 2
- 3
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6656
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功