diff --git a/doc/mysql.sql b/doc/mysql.sql
index 595151bc360957b88723106e91e126528f0a9e5e..b9592e393ad4ab1a5b21e2961f208d4e7afe32ec 100644
--- a/doc/mysql.sql
+++ b/doc/mysql.sql
@@ -305,6 +305,8 @@ INSERT INTO `sys_dict_detail`(`id`, `label`, `value`, `sort`, `dict_id`, `create
INSERT INTO `sys_dict_detail`(`id`, `label`, `value`, `sort`, `dict_id`, `create_time`) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
INSERT INTO `sys_job` VALUES ('1252884495040782337', 'testTask', '1', '0 */1 * * * ?', 0, '1', '2020-04-22 16:58:35');
+INSERT INTO `sys_job` VALUES ('1298909572007137282', 'systemTask', '', '0 */2 * * * ?', 0, '服务器系统信息推送定时任务', '2020-08-27 17:05:49');
+
-- 2020.5.27添加文章管理 begin
INSERT INTO `sys_permission` VALUES ('8cbcf9939f2f11ea9b7bb4a9fc2c4442', '文章管理', NULL, NULL, '/index/sysContent', '_self', 'e549c4b8-72ca-4ba3-91a8-9ffa1daf77cf', 10, 2, 1, NULL, NULL, 1);
diff --git a/doc/oracle.sql b/doc/oracle.sql
index e48e836bdd7b9e63913e7740096712529e2d044b..727117c4ffb01225ccccc599e674724e79a24eb2 100644
--- a/doc/oracle.sql
+++ b/doc/oracle.sql
@@ -193,6 +193,7 @@ INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
INSERT INTO sys_job(id, bean_name, params, cron_expression, status, remark, create_time) VALUES ('1252884495040782337', 'testTask', '1', '0 */1 * * * ?', 0, '1', '2020-04-22 16:58:35');
+INSERT INTO sys_job(id, bean_name, params, cron_expression, status, remark, create_time) VALUES ('1298909572007137282', 'systemTask', '', '0 */2 * * * ?', 0, '服务器系统信息推送定时任务', '2020-08-27 17:05:49');
INSERT INTO sys_permission(id, name, perms, icon, url, target, pid, order_num, type, status, create_time, update_time, deleted) VALUES ('010bcf8b-3172-4331-9941-25788ca8cbb0', '删除', 'sysGenerator:delete', NULL, 'sysGenerator/delete', NULL, '43d1bbf7-fc4a-4a10-9ad1-205b16c7c05f', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
INSERT INTO sys_permission(id, name, perms, icon, url, target, pid, order_num, type, status, create_time, update_time, deleted) VALUES ('0d99b687-3f46-4632-9d56-8dd5e476dae7', 'SQL 监控', '', '', '/druid/sql.html', '_self', '65bdb02f47b94e71c2a2b9e459bde909', 98, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:59', 1);
diff --git a/doc/sqlServer.sql b/doc/sqlServer.sql
index b5cb34da81efb0f3bceee301ff8645b1412c0529..5e5fcadb9e722b077a178c9d9bf6d92c4a818ce4 100644
--- a/doc/sqlServer.sql
+++ b/doc/sqlServer.sql
@@ -184,6 +184,7 @@ INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
INSERT INTO sys_job(id, bean_name, params, cron_expression, status, remark, create_time) VALUES ('1252884495040782337', 'testTask', '1', '0 */1 * * * ?', 0, '1', '2020-04-22 16:58:35');
+INSERT INTO sys_job(id, bean_name, params, cron_expression, status, remark, create_time) VALUES ('1298909572007137282', 'systemTask', '', '0 */2 * * * ?', 0, '服务器系统信息推送定时任务', '2020-08-27 17:05:49');
INSERT INTO sys_permission(id, name, perms, icon, url, target, pid, order_num, type, status, create_time, update_time, deleted) VALUES ('010bcf8b-3172-4331-9941-25788ca8cbb0', '删除', 'sysGenerator:delete', NULL, 'sysGenerator/delete', NULL, '43d1bbf7-fc4a-4a10-9ad1-205b16c7c05f', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
INSERT INTO sys_permission(id, name, perms, icon, url, target, pid, order_num, type, status, create_time, update_time, deleted) VALUES ('0d99b687-3f46-4632-9d56-8dd5e476dae7', 'SQL 监控', '', '', '/druid/sql.html', '_self', '65bdb02f47b94e71c2a2b9e459bde909', 98, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:59', 1);
diff --git a/pom.xml b/pom.xml
index 99cd52d362bab7ee6ce87f5fa198c4dee8980ea7..15ccbf2ff7eb305d1329c6eda6678c6515fde533 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,11 +36,17 @@
spring-boot-starter-test
test
+
org.springframework.boot
spring-boot-starter-aop
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
com.alibaba
diff --git a/src/main/java/com/company/project/common/config/WebSocketConfig.java b/src/main/java/com/company/project/common/config/WebSocketConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..757220a83395270dbd1cd3dec1ffa8a99f688dde
--- /dev/null
+++ b/src/main/java/com/company/project/common/config/WebSocketConfig.java
@@ -0,0 +1,40 @@
+package com.company.project.common.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+/**
+ * WebSocket配置
+ *
+ * @author wangyihang
+ * @version V1.0
+ * @date 2020年8月26日
+ */
+@Configuration
+@EnableWebSocket
+//注解开启使用STOMP协议来传输基于代理(message broker)的消息,这时控制器支持使用@MessageMapping,就像使用@RequestMapping一样
+@EnableWebSocketMessageBroker
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+
+ @Override
+ //注册STOMP协议的节点(endpoint),并映射指定的url
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ // 注册一个 /notification 端点,前端通过这个端点进行连接
+ registry.addEndpoint("/notification")
+ //解决跨域问题
+ .setAllowedOrigins("*")
+ .withSockJS();
+ }
+
+ @Override
+ //配置消息代理(Message Broker)
+ public void configureMessageBroker(MessageBrokerRegistry registry) {
+ //定义了一个客户端订阅地址的前缀信息,也就是客户端接收服务端发送消息的前缀信息
+ registry.enableSimpleBroker("/topic");
+ }
+
+}
diff --git a/src/main/java/com/company/project/common/job/task/SystemTask.java b/src/main/java/com/company/project/common/job/task/SystemTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf4f3ba0b95ed80d1a0f7f4e0e01ab8fb53195ae
--- /dev/null
+++ b/src/main/java/com/company/project/common/job/task/SystemTask.java
@@ -0,0 +1,36 @@
+package com.company.project.common.job.task;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import com.company.project.common.utils.Constant;
+import com.company.project.entity.oshi.SystemHardwareInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * 系统信息推送定时任务
+ *
+ * @author wangyihang
+ * @version V1.0
+ * @date 2020年8月26日
+ */
+@Slf4j
+@Component("systemTask")
+public class SystemTask {
+ @Resource
+ private SimpMessagingTemplate wsTemplate;
+ public void run(String params){
+ log.info("【推送消息】开始执行:{}", DateUtil.formatDateTime(new Date()));
+ // 查询服务器状态
+ SystemHardwareInfo server = new SystemHardwareInfo();
+ server.copyTo();
+ wsTemplate.convertAndSend(Constant.PUSH_SERVER, JSONUtil.toJsonStr(server));
+ //发送给指定用户
+// wsTemplate.convertAndSendToUser()
+ log.info("【推送消息】执行结束:{}", DateUtil.formatDateTime(new Date()));
+ }
+}
diff --git a/src/main/java/com/company/project/common/shiro/ShiroConfig.java b/src/main/java/com/company/project/common/shiro/ShiroConfig.java
index cbf841c4935b912f00b91d634642dff601b9db4b..a711cdd7629e00c5597c50e17ca28827a7935ca1 100644
--- a/src/main/java/com/company/project/common/shiro/ShiroConfig.java
+++ b/src/main/java/com/company/project/common/shiro/ShiroConfig.java
@@ -74,6 +74,7 @@ public class ShiroConfig {
shiroFilterFactoryBean.setFilters(filtersMap);
Map filterChainDefinitionMap = new LinkedHashMap<>();
// 配置不会被拦截的链接 顺序判断
+ filterChainDefinitionMap.put("/notification/**", "anon");
filterChainDefinitionMap.put("/sys/user/login", "anon");
filterChainDefinitionMap.put("/sys/user/token", "anon");
filterChainDefinitionMap.put("/sys/getVerify", "anon");
diff --git a/src/main/java/com/company/project/common/utils/Constant.java b/src/main/java/com/company/project/common/utils/Constant.java
index 836a5091294e6a3300c3544268e3b21120fb2c94..bc266816563fa1b6011a5dfda33d565d676fc06d 100644
--- a/src/main/java/com/company/project/common/utils/Constant.java
+++ b/src/main/java/com/company/project/common/utils/Constant.java
@@ -25,6 +25,7 @@ public class Constant {
*/
public static final String ACCESS_TOKEN = "authorization";
+ public static final String PUSH_SERVER = "/topic/system";
/**
* 定时任务状态
diff --git a/src/main/java/com/company/project/controller/SystemController.java b/src/main/java/com/company/project/controller/SystemController.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac2c35aa46d76d5d42d10697cf1ea2f85ff88aa0
--- /dev/null
+++ b/src/main/java/com/company/project/controller/SystemController.java
@@ -0,0 +1,30 @@
+package com.company.project.controller;
+
+import com.company.project.common.utils.DataResult;
+import com.company.project.entity.oshi.SystemHardwareInfo;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 系统信息
+ *
+ * @author wangyihang
+ * @version V1.0
+ * @date 2020年8月26日
+ */
+@Api(tags = "系统信息")
+@RestController
+@RequestMapping("/sys")
+public class SystemController {
+
+ @GetMapping("/info")
+ public DataResult systemInfo() {
+ SystemHardwareInfo systemHardwareInfo = new SystemHardwareInfo();
+ systemHardwareInfo.copyTo();
+ DataResult dataResult = DataResult.success(systemHardwareInfo);
+
+ return dataResult ;
+ }
+}
diff --git a/src/main/java/com/company/project/entity/oshi/model/JvmInfo.java b/src/main/java/com/company/project/entity/oshi/model/JvmInfo.java
index 64487dfdb8028e8a8422922b70781fe36f158c51..1c73d3d3a78d659b35f9f25dceff2c5de9d53e1a 100644
--- a/src/main/java/com/company/project/entity/oshi/model/JvmInfo.java
+++ b/src/main/java/com/company/project/entity/oshi/model/JvmInfo.java
@@ -42,6 +42,19 @@ public class JvmInfo {
*/
private String home;
+ /*已用内存*/
+ private double used;
+
+ /*Jvm名称*/
+ private String name;
+
+ /*启动时间*/
+ private String startTime;
+
+ /*运行时长*/
+ private String runTime;
+
+
public double getTotal() {
return NumberUtil.div(total, (1024 * 1024), 2);
}
diff --git a/src/main/java/com/company/project/entity/oshi/model/MemInfo.java b/src/main/java/com/company/project/entity/oshi/model/MemInfo.java
index a6c171d5fe40491aade5649dc76dafc6d995c792..b4e3d54e1f9116ef36615d63a24333ba856bb459 100644
--- a/src/main/java/com/company/project/entity/oshi/model/MemInfo.java
+++ b/src/main/java/com/company/project/entity/oshi/model/MemInfo.java
@@ -27,6 +27,12 @@ public class MemInfo {
*/
private double free;
+ /**
+ * 使用率
+ */
+ private double usage;
+
+
public double getTotal() {
return NumberUtil.div(total, (1024 * 1024 * 1024), 2);
}
diff --git a/src/main/resources/static/js/sockjs.min.js b/src/main/resources/static/js/sockjs.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..a0ca5509ac4bf429056501ab107a91f48edca97d
--- /dev/null
+++ b/src/main/resources/static/js/sockjs.min.js
@@ -0,0 +1,3 @@
+/* sockjs-client v1.5.0 | http://sockjs.org | MIT license */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).SockJS=e()}}(function(){return function i(s,a,l){function u(t,e){if(!a[t]){if(!s[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=a[t]={exports:{}};s[t][0].call(o.exports,function(e){return u(s[t][1][e]||e)},o,o.exports,i,s,a,l)}return a[t].exports}for(var c="function"==typeof require&&require,e=0;e>>0;if(!a(e))throw new TypeError;for(;++i>>0;if(!r)return-1;var o=0;for(1>>0:function(e){return e>>>0}(t);(o=e.exec(n))&&!(u<(i=o.index+o[0].length)&&(a.push(n.slice(u,o.index)),!_&&1=t));)e.lastIndex===o.index&&e.lastIndex++;return u===n.length?!s&&e.test("")||a.push(""):a.push(n.slice(u)),a.length>t?a.slice(0,t):a}):"0".split(void 0,0).length&&(s.split=function(e,t){return void 0===e&&0===t?[]:E.call(this,e,t)});var j=s.substr,S="".substr&&"b"!=="0b".substr(-1);d(s,{substr:function(e,t){return j.call(this,e<0&&(e=this.length+e)<0?0:e,t)}},S)},{}],16:[function(e,t,n){"use strict";t.exports=[e("./transport/websocket"),e("./transport/xhr-streaming"),e("./transport/xdr-streaming"),e("./transport/eventsource"),e("./transport/lib/iframe-wrap")(e("./transport/eventsource")),e("./transport/htmlfile"),e("./transport/lib/iframe-wrap")(e("./transport/htmlfile")),e("./transport/xhr-polling"),e("./transport/xdr-polling"),e("./transport/lib/iframe-wrap")(e("./transport/xhr-polling")),e("./transport/jsonp-polling")]},{"./transport/eventsource":20,"./transport/htmlfile":21,"./transport/jsonp-polling":23,"./transport/lib/iframe-wrap":26,"./transport/websocket":38,"./transport/xdr-polling":39,"./transport/xdr-streaming":40,"./transport/xhr-polling":41,"./transport/xhr-streaming":42}],17:[function(o,f,e){(function(e){"use strict";var i=o("events").EventEmitter,t=o("inherits"),s=o("../../utils/event"),a=o("../../utils/url"),l=e.XMLHttpRequest,u=function(){};function c(e,t,n,r){u(e,t);var o=this;i.call(this),setTimeout(function(){o._start(e,t,n,r)},0)}t(c,i),c.prototype._start=function(e,t,n,r){var o=this;try{this.xhr=new l}catch(e){}if(!this.xhr)return u("no xhr"),this.emit("finish",0,"no xhr support"),void this._cleanup();t=a.addQuery(t,"t="+ +new Date),this.unloadRef=s.unloadAdd(function(){u("unload cleanup"),o._cleanup(!0)});try{this.xhr.open(e,t,!0),this.timeout&&"timeout"in this.xhr&&(this.xhr.timeout=this.timeout,this.xhr.ontimeout=function(){u("xhr timeout"),o.emit("finish",0,""),o._cleanup(!1)})}catch(e){return u("exception",e),this.emit("finish",0,""),void this._cleanup(!1)}if(r&&r.noCredentials||!c.supportsCORS||(u("withCredentials"),this.xhr.withCredentials=!0),r&&r.headers)for(var i in r.headers)this.xhr.setRequestHeader(i,r.headers[i]);this.xhr.onreadystatechange=function(){if(o.xhr){var e,t,n=o.xhr;switch(u("readyState",n.readyState),n.readyState){case 3:try{t=n.status,e=n.responseText}catch(e){}u("status",t),1223===t&&(t=204),200===t&&e&&0')}catch(e){var n=s.document.createElement("iframe");return n.name=t,n}}(r);o.id=r,o.style.display="none",a.appendChild(o);try{l.value=t}catch(e){}a.submit();function i(e){f("completed",r,e),o.onerror&&(o.onreadystatechange=o.onerror=o.onload=null,setTimeout(function(){f("cleaning up",r),o.parentNode.removeChild(o),o=null},500),l.value="",n(e))}return o.onerror=function(){f("onerror",r),i()},o.onload=function(){f("onload",r),i()},o.onreadystatechange=function(e){f("onreadystatechange",r,o.readyState,e),"complete"===o.readyState&&i()},function(){f("aborted",r),i(new Error("Aborted"))}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/random":50,"../../utils/url":52,"debug":void 0}],34:[function(r,u,e){(function(i){"use strict";var o=r("events").EventEmitter,e=r("inherits"),s=r("../../utils/event"),t=r("../../utils/browser"),a=r("../../utils/url"),l=function(){};function n(e,t,n){l(e,t);var r=this;o.call(this),setTimeout(function(){r._start(e,t,n)},0)}e(n,o),n.prototype._start=function(e,t,n){l("_start");var r=this,o=new i.XDomainRequest;t=a.addQuery(t,"t="+ +new Date),o.onerror=function(){l("onerror"),r._error()},o.ontimeout=function(){l("ontimeout"),r._error()},o.onprogress=function(){l("progress",o.responseText),r.emit("chunk",200,o.responseText)},o.onload=function(){l("load"),r.emit("finish",200,o.responseText),r._cleanup(!1)},this.xdr=o,this.unloadRef=s.unloadAdd(function(){r._cleanup(!0)});try{this.xdr.open(e,t),this.timeout&&(this.xdr.timeout=this.timeout),this.xdr.send(n)}catch(e){this._error()}},n.prototype._error=function(){this.emit("finish",0,""),this._cleanup(!1)},n.prototype._cleanup=function(e){if(l("cleanup",e),this.xdr){if(this.removeAllListeners(),s.unloadDel(this.unloadRef),this.xdr.ontimeout=this.xdr.onerror=this.xdr.onprogress=this.xdr.onload=null,e)try{this.xdr.abort()}catch(e){}this.unloadRef=this.xdr=null}},n.prototype.close=function(){l("close"),this._cleanup(!0)},n.enabled=!(!i.XDomainRequest||!t.hasDomain()),u.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/browser":44,"../../utils/event":46,"../../utils/url":52,"debug":void 0,"events":3,"inherits":54}],35:[function(e,t,n){"use strict";var r=e("inherits"),o=e("../driver/xhr");function i(e,t,n,r){o.call(this,e,t,n,r)}r(i,o),i.enabled=o.enabled&&o.supportsCORS,t.exports=i},{"../driver/xhr":17,"inherits":54}],36:[function(e,t,n){"use strict";var r=e("events").EventEmitter;function o(){var e=this;r.call(this),this.to=setTimeout(function(){e.emit("finish",200,"{}")},o.timeout)}e("inherits")(o,r),o.prototype.close=function(){clearTimeout(this.to)},o.timeout=2e3,t.exports=o},{"events":3,"inherits":54}],37:[function(e,t,n){"use strict";var r=e("inherits"),o=e("../driver/xhr");function i(e,t,n){o.call(this,e,t,n,{noCredentials:!0})}r(i,o),i.enabled=o.enabled,t.exports=i},{"../driver/xhr":17,"inherits":54}],38:[function(e,t,n){"use strict";var i=e("../utils/event"),s=e("../utils/url"),r=e("inherits"),a=e("events").EventEmitter,l=e("./driver/websocket"),u=function(){};function c(e,t,n){if(!c.enabled())throw new Error("Transport created when disabled");a.call(this),u("constructor",e);var r=this,o=s.addPath(e,"/websocket");o="https"===o.slice(0,5)?"wss"+o.slice(5):"ws"+o.slice(4),this.url=o,this.ws=new l(this.url,[],n),this.ws.onmessage=function(e){u("message event",e.data),r.emit("message",e.data)},this.unloadRef=i.unloadAdd(function(){u("unload"),r.ws.close()}),this.ws.onclose=function(e){u("close event",e.code,e.reason),r.emit("close",e.code,e.reason),r._cleanup()},this.ws.onerror=function(e){u("error event",e),r.emit("close",1006,"WebSocket connection broken"),r._cleanup()}}r(c,a),c.prototype.send=function(e){var t="["+e+"]";u("send",t),this.ws.send(t)},c.prototype.close=function(){u("close");var e=this.ws;this._cleanup(),e&&e.close()},c.prototype._cleanup=function(){u("_cleanup");var e=this.ws;e&&(e.onmessage=e.onclose=e.onerror=null),i.unloadDel(this.unloadRef),this.unloadRef=this.ws=null,this.removeAllListeners()},c.enabled=function(){return u("enabled"),!!l},c.transportName="websocket",c.roundTrips=2,t.exports=c},{"../utils/event":46,"../utils/url":52,"./driver/websocket":19,"debug":void 0,"events":3,"inherits":54}],39:[function(e,t,n){"use strict";var r=e("inherits"),o=e("./lib/ajax-based"),i=e("./xdr-streaming"),s=e("./receiver/xhr"),a=e("./sender/xdr");function l(e){if(!a.enabled)throw new Error("Transport created when disabled");o.call(this,e,"/xhr",s,a)}r(l,o),l.enabled=i.enabled,l.transportName="xdr-polling",l.roundTrips=2,t.exports=l},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xdr":34,"./xdr-streaming":40,"inherits":54}],40:[function(e,t,n){"use strict";var r=e("inherits"),o=e("./lib/ajax-based"),i=e("./receiver/xhr"),s=e("./sender/xdr");function a(e){if(!s.enabled)throw new Error("Transport created when disabled");o.call(this,e,"/xhr_streaming",i,s)}r(a,o),a.enabled=function(e){return!e.cookie_needed&&!e.nullOrigin&&(s.enabled&&e.sameScheme)},a.transportName="xdr-streaming",a.roundTrips=2,t.exports=a},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xdr":34,"inherits":54}],41:[function(e,t,n){"use strict";var r=e("inherits"),o=e("./lib/ajax-based"),i=e("./receiver/xhr"),s=e("./sender/xhr-cors"),a=e("./sender/xhr-local");function l(e){if(!a.enabled&&!s.enabled)throw new Error("Transport created when disabled");o.call(this,e,"/xhr",i,s)}r(l,o),l.enabled=function(e){return!e.nullOrigin&&(!(!a.enabled||!e.sameOrigin)||s.enabled)},l.transportName="xhr-polling",l.roundTrips=2,t.exports=l},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xhr-cors":35,"./sender/xhr-local":37,"inherits":54}],42:[function(l,u,e){(function(e){"use strict";var t=l("inherits"),n=l("./lib/ajax-based"),r=l("./receiver/xhr"),o=l("./sender/xhr-cors"),i=l("./sender/xhr-local"),s=l("../utils/browser");function a(e){if(!i.enabled&&!o.enabled)throw new Error("Transport created when disabled");n.call(this,e,"/xhr_streaming",r,o)}t(a,n),a.enabled=function(e){return!e.nullOrigin&&(!s.isOpera()&&o.enabled)},a.transportName="xhr-streaming",a.roundTrips=2,a.needBody=!!e.document,u.exports=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../utils/browser":44,"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xhr-cors":35,"./sender/xhr-local":37,"inherits":54}],43:[function(e,t,n){(function(n){"use strict";n.crypto&&n.crypto.getRandomValues?t.exports.randomBytes=function(e){var t=new Uint8Array(e);return n.crypto.getRandomValues(t),t}:t.exports.randomBytes=function(e){for(var t=new Array(e),n=0;n
-
+
+
+
+