userId_socket_Map = new ConcurrentHashMap<>();
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/resources/AuthKey.p8:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgsz9/O3BAwxCRHnp57ChLye/C5DJinnYnY+m8yiKDvWugCgYIKoZIzj0DAQehRANCAARFV61TSXPCxcUKXNU5so8Njrhndav/xuCmSQxfJsk5h0RP+KM9bdswtgc/jxEnI2Qa80KVL+ZVI7ZscauA9HH/
3 | -----END PRIVATE KEY-----
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.application.name=spirng-chat
2 | spring.data.mongodb.uri=mongodb://192.168.0.33:27017/springchat
3 | server.port=8080
4 | # IM info
5 | im.server.host=192.168.0.33
6 | im.server.port=9006
7 | #解决乱码问题
8 | spring.http.encoding.force=true
9 | spring.http.encoding.charset=UTF-8
10 | spring.http.encoding.enabled=true
11 | server.tomcat.uri-encoding=UTF-8
12 | #出现错误时, 直接抛出异常
13 | spring.mvc.throw-exception-if-no-handler-found=true
14 | #spring.resources.add-mappings=false
15 | #server.sessionTimeout=10
16 | #favicon.ico放置在src/main/resources/static下
17 | spring.mvc.favicon.enabled=false
18 | # 文件上传配置
19 | spring.http.multipart.max-file-size=15MB
20 | spring.http.multipart.max-request-size=15MB
21 | web.upload-path=/Users/liudong/Downloads/111111111/
22 | spring.mvc.static-path-pattern=/static/**
23 | spring.resources.static-locations=classpath:/static/,file:${web.upload-path}
24 |
25 |
--------------------------------------------------------------------------------
/src/main/resources/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/favicon.ico
--------------------------------------------------------------------------------
/src/main/resources/static/html/chatlog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 聊天记录
9 |
10 |
11 |
16 |
17 |
18 |
19 |
22 |
23 |
24 |
25 |
26 |
39 |
40 |
44 |
45 |
46 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/src/main/resources/static/html/creategroup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 创建群组
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
42 |
43 |
69 |
--------------------------------------------------------------------------------
/src/main/resources/static/html/friend.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 好友信息
6 |
7 |
8 |
9 |
10 |
11 |
47 |
48 |
75 |
--------------------------------------------------------------------------------
/src/main/resources/static/html/setting.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 设置
7 |
8 |
9 |
12 |
13 |
14 |
24 |
27 |
28 |
31 |
32 |
33 |
43 |
44 |
--------------------------------------------------------------------------------
/src/main/resources/static/html/userinfo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 修改用户信息
6 |
7 |
8 |
9 |
10 |
11 |
12 |
83 |
84 |
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/094fc8fb017743cea89eece53c7f35be.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/094fc8fb017743cea89eece53c7f35be.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/2a015308ac4544fea8a2f32ecc599961.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/2a015308ac4544fea8a2f32ecc599961.gif
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(1).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(1).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(10).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(10).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(2).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(2).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(3).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(3).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(4).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(4).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(5).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(5).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(6).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(6).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(7).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(7).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(8).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(8).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/avatar/avatar(9).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/avatar/avatar(9).jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/group/group_1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/group/group_1.gif
--------------------------------------------------------------------------------
/src/main/resources/static/image/group/group_2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/group/group_2.gif
--------------------------------------------------------------------------------
/src/main/resources/static/image/group/group_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/group/group_3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/image/group/group_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/image/group/group_4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 即时通讯
6 |
7 |
8 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | 换屏
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | 效果
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
153 |
154 |
155 |
156 |
157 |
--------------------------------------------------------------------------------
/src/main/resources/static/js/user.js:
--------------------------------------------------------------------------------
1 | layui.use(['jquery', 'layer', 'form', 'upload'], function() {
2 | var $ = layui.jquery,
3 | layim = parent.layim,
4 | form = layui.form,
5 | layer = layui.layer;
6 | //屏蔽右键菜单
7 | $(document).bind("contextmenu",function(e){
8 | return false;
9 | });
10 | //修改头像
11 | layui.upload({
12 | url: "/user/updateAvatar"
13 | ,title: '修改头像'
14 | ,ext: 'jpg|png|gif'
15 | ,before: function(input) {
16 | console.log("before upload!");
17 | }
18 | ,success: function(res, input){
19 | if(0 == res.code){
20 | $("#LAY_demo_upload").attr('src', res.data.src);
21 | $("#user_avatar").val(res.data.src);
22 | layer.msg("修改成功!", {time:2000});
23 | }else{
24 | layer.msg(res.msg, {time:2000});
25 | }
26 | }
27 | });
28 |
29 | //从缓存中初始化数据
30 | $(document).ready(function(){
31 | var mine = layim.cache().mine;
32 | $("#username").val(mine.username);
33 | $("#email").val(mine.email);
34 | $("#sign").val(mine.sign);
35 | $("#LAY_demo_upload").attr("src", mine.avatar);
36 | if (mine.sex == "0") {
37 | $("input[type='radio']").eq(0).attr("checked",true);
38 | } else {
39 | $("input[type='radio']").eq(1).attr("checked",true);
40 | }
41 | });
42 |
43 | //提交修改项
44 | $("#btn").click(function(){
45 | layer.ready(function(){
46 | var username = $("#username").val();
47 | var email = $("#email").val();
48 | var sex = $("input[type='radio']:checked").val();
49 | if('' == username){
50 | layer.tips('用户名不能为空', '#username');
51 | return ;
52 | }
53 | if('' == email){
54 | layer.tips('邮箱不能为空!', '#email');
55 | return ;
56 | }
57 |
58 | var oldpwd = $("#oldpwd").val(); //旧密码
59 | var pwd = $("#pwd").val();
60 | var repwd = $("#repwd").val();
61 | if('' != oldpwd){
62 | if('' == pwd){
63 | layer.tips('新密码不能为空', '#pwd');
64 | return ;
65 | }
66 | if('' != pwd && '' == repwd){
67 | layer.tips('重复密码不能为空', '#repwd');
68 | return ;
69 | }
70 | if(!/^[\S]{6,12}$/.test(oldpwd)){
71 | layer.tips('密码必须6到12位', '#oldpwd');
72 | return ;
73 | }
74 | if('' != pwd && '' != repwd && '' == oldpwd){
75 | layer.tips('必须输入旧密码', '#oldpwd');
76 | return ;
77 | }
78 | if('' != pwd && '' != repwd && '' != oldpwd && pwd != repwd){
79 | layer.tips('两次密码不一致', '#pwd');
80 | return ;
81 | }
82 | if('' != pwd && '' != repwd && '' != oldpwd && pwd == repwd){
83 | if(!/^[\S]{6,12}$/.test(pwd)){
84 | layer.tips('密码必须6到12位', '#pwd');
85 | return ;
86 | }
87 | if(!/^[\S]{6,12}$/.test(repwd)){
88 | layer.tips('密码必须6到12位', '#repwd');
89 | return ;
90 | }
91 | }
92 | }
93 |
94 | });
95 | });
96 | });
--------------------------------------------------------------------------------
/src/main/resources/static/json/particles0.json:
--------------------------------------------------------------------------------
1 | {
2 | "particles": {
3 | "number": {
4 | "value": 80,
5 | "density": {
6 | "enable": true,
7 | "value_area": 800
8 | }
9 | },
10 | "color": {
11 | "value": "#ffffff"
12 | },
13 | "shape": {
14 | "type": "circle",
15 | "stroke": {
16 | "width": 0,
17 | "color": "#000000"
18 | },
19 | "polygon": {
20 | "nb_sides": 5
21 | },
22 | "image": {
23 | "src": "img/github.svg",
24 | "width": 100,
25 | "height": 100
26 | }
27 | },
28 | "opacity": {
29 | "value": 0.5,
30 | "random": false,
31 | "anim": {
32 | "enable": false,
33 | "speed": 1,
34 | "opacity_min": 0.1,
35 | "sync": false
36 | }
37 | },
38 | "size": {
39 | "value": 5,
40 | "random": true,
41 | "anim": {
42 | "enable": false,
43 | "speed": 40,
44 | "size_min": 0.1,
45 | "sync": false
46 | }
47 | },
48 | "line_linked": {
49 | "enable": true,
50 | "distance": 150,
51 | "color": "#ffffff",
52 | "opacity": 0.4,
53 | "width": 1
54 | },
55 | "move": {
56 | "enable": true,
57 | "speed": 6,
58 | "direction": "none",
59 | "random": false,
60 | "straight": false,
61 | "out_mode": "out",
62 | "attract": {
63 | "enable": false,
64 | "rotateX": 600,
65 | "rotateY": 1200
66 | }
67 | }
68 | },
69 | "interactivity": {
70 | "detect_on": "canvas",
71 | "events": {
72 | "onhover": {
73 | "enable": true,
74 | "mode": "repulse"
75 | },
76 | "onclick": {
77 | "enable": true,
78 | "mode": "push"
79 | },
80 | "resize": true
81 | },
82 | "modes": {
83 | "grab": {
84 | "distance": 400,
85 | "line_linked": {
86 | "opacity": 1
87 | }
88 | },
89 | "bubble": {
90 | "distance": 400,
91 | "size": 40,
92 | "duration": 2,
93 | "opacity": 8,
94 | "speed": 3
95 | },
96 | "repulse": {
97 | "distance": 200
98 | },
99 | "push": {
100 | "particles_nb": 4
101 | },
102 | "remove": {
103 | "particles_nb": 2
104 | }
105 | }
106 | },
107 | "retina_detect": true,
108 | "config_demo": {
109 | "hide_card": false,
110 | "background_color": "#b61924",
111 | "background_image": "",
112 | "background_position": "50% 50%",
113 | "background_repeat": "no-repeat",
114 | "background_size": "cover"
115 | }
116 | }
--------------------------------------------------------------------------------
/src/main/resources/static/json/particles1.json:
--------------------------------------------------------------------------------
1 | {
2 | "particles": {
3 | "number": {
4 | "value": 150,
5 | "density": {
6 | "enable": true,
7 | "value_area": 800
8 | }
9 | },
10 | "color": {
11 | "value": "#ffffff"
12 | },
13 | "shape": {
14 | "type": "circle",
15 | "stroke": {
16 | "width": 0,
17 | "color": "#000000"
18 | },
19 | "polygon": {
20 | "nb_sides": 5
21 | },
22 | "image": {
23 | "src": "img/github.svg",
24 | "width": 100,
25 | "height": 100
26 | }
27 | },
28 | "opacity": {
29 | "value": 0.5,
30 | "random": false,
31 | "anim": {
32 | "enable": false,
33 | "speed": 1,
34 | "opacity_min": 0.1,
35 | "sync": false
36 | }
37 | },
38 | "size": {
39 | "value": 3,
40 | "random": true,
41 | "anim": {
42 | "enable": false,
43 | "speed": 40,
44 | "size_min": 0.1,
45 | "sync": false
46 | }
47 | },
48 | "line_linked": {
49 | "enable": true,
50 | "distance": 150,
51 | "color": "#ffffff",
52 | "opacity": 0.4,
53 | "width": 1
54 | },
55 | "move": {
56 | "enable": true,
57 | "speed": 6,
58 | "direction": "none",
59 | "random": false,
60 | "straight": false,
61 | "out_mode": "out",
62 | "bounce": false,
63 | "attract": {
64 | "enable": false,
65 | "rotateX": 600,
66 | "rotateY": 1200
67 | }
68 | }
69 | },
70 | "interactivity": {
71 | "detect_on": "canvas",
72 | "events": {
73 | "onhover": {
74 | "enable": true,
75 | "mode": "grab"
76 | },
77 | "onclick": {
78 | "enable": true,
79 | "mode": "push"
80 | },
81 | "resize": true
82 | },
83 | "modes": {
84 | "grab": {
85 | "distance": 140,
86 | "line_linked": {
87 | "opacity": 1
88 | }
89 | },
90 | "bubble": {
91 | "distance": 400,
92 | "size": 40,
93 | "duration": 2,
94 | "opacity": 8,
95 | "speed": 3
96 | },
97 | "repulse": {
98 | "distance": 200,
99 | "duration": 0.4
100 | },
101 | "push": {
102 | "particles_nb": 4
103 | },
104 | "remove": {
105 | "particles_nb": 2
106 | }
107 | }
108 | },
109 | "retina_detect": true
110 | }
--------------------------------------------------------------------------------
/src/main/resources/static/json/particles2.json:
--------------------------------------------------------------------------------
1 | {
2 | "particles": {
3 | "number": {
4 | "value": 100
5 | },
6 | "shape": {
7 | "type": "circle"
8 | },
9 | "size": {
10 | "value": 10,
11 | "random": true
12 | },
13 | "line_linked": {
14 | "enable": false
15 | },
16 | "move": {
17 | "enable": true,
18 | "speed": 2,
19 | "direction": "bottom",
20 | "straight": false
21 | }
22 | },
23 | "interactivity": {
24 | "detect_on": "canvas",
25 | "events": {
26 | "onhover": {
27 | "enable": false
28 | }
29 | },
30 | "modes": {
31 | "push": {
32 | "particles_nb": 12
33 | }
34 | }
35 | }
36 | }
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: layui.code
4 | @Author: 贤心
5 | @Site: http://www.layui.com
6 |
7 | */
8 |
9 | /* 加载就绪标志 */
10 | html #layuicss-skincodecss{display:none; position: absolute; width:1989px;}
11 |
12 | /* 默认风格 */
13 | .layui-code-view{display: block; position: relative; margin: 10px 0; padding: 0; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}
14 | .layui-code-h3{position: relative; padding: 0 10px; height: 30px; line-height: 30px; border-bottom: 1px solid #ddd; font-size: 12px;}
15 | .layui-code-h3 a{position: absolute; right: 10px; top: 0; color: #999;}
16 | .layui-code-view .layui-code-ol{position: relative; overflow: auto;}
17 | .layui-code-view .layui-code-ol li{position: relative; margin-left: 45px; line-height: 20px; padding: 0 5px; border-left: 1px solid #ddd; list-style-type: decimal-leading-zero; *list-style-type: decimal; background-color: #fff;}
18 | .layui-code-view pre{margin: 0;}
19 |
20 | /* notepadd++风格 */
21 | .layui-code-notepad{border: 1px solid #0C0C0C; border-left-color: #3F3F3F; background-color: #0C0C0C; color: #C2BE9E}
22 | .layui-code-notepad .layui-code-h3{border-bottom: none;}
23 | .layui-code-notepad .layui-code-ol li{background-color: #3F3F3F; border-left: none;}
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/laydate/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/laydate/icon.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/html/find.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 发现
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
此为自定义的【查找】页面,因需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控。
19 |
文件所在目录(相对于layui.js):/css/modules/layim/html/find.html
20 |
21 |
22 |
23 |
24 |
25 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/html/getmsg.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 0,
3 | "pages": 1,
4 | "data": [
5 | {
6 | "id": 76,
7 | "content": "申请添加你为好友",
8 | "uid": 168,
9 | "from": 166488,
10 | "from_group": 0,
11 | "type": 1,
12 | "remark": "有问题要问",
13 | "href": null,
14 | "read": 1,
15 | "time": "刚刚",
16 | "user": {
17 | "id": 166488,
18 | "avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100",
19 | "username": "李彦宏",
20 | "sign": null
21 | }
22 | },
23 | {
24 | "id": 75,
25 | "content": "申请添加你为好友",
26 | "uid": 168,
27 | "from": 347592,
28 | "from_group": 0,
29 | "type": 1,
30 | "remark": "你好啊!",
31 | "href": null,
32 | "read": 1,
33 | "time": "刚刚",
34 | "user": {
35 | "id": 347592,
36 | "avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100",
37 | "username": "麻花疼",
38 | "sign": null
39 | }
40 | },
41 | {
42 | "id": 62,
43 | "content": "雷军 拒绝了你的好友申请",
44 | "uid": 168,
45 | "from": null,
46 | "from_group": null,
47 | "type": 1,
48 | "remark": null,
49 | "href": null,
50 | "read": 1,
51 | "time": "10天前",
52 | "user": {
53 | "id": null
54 | }
55 | },
56 | {
57 | "id": 60,
58 | "content": "马小云 已经同意你的好友申请",
59 | "uid": 168,
60 | "from": null,
61 | "from_group": null,
62 | "type": 1,
63 | "remark": null,
64 | "href": null,
65 | "read": 1,
66 | "time": "10天前",
67 | "user": {
68 | "id": null
69 | }
70 | },
71 | {
72 | "id": 61,
73 | "content": "贤心 已经同意你的好友申请",
74 | "uid": 168,
75 | "from": null,
76 | "from_group": null,
77 | "type": 1,
78 | "remark": null,
79 | "href": null,
80 | "read": 1,
81 | "time": "10天前",
82 | "user": {
83 | "id": null
84 | }
85 | }
86 | ]
87 | }
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/mobile/layim.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: layim
4 | @Author: 贤心
5 | @Site: http://layim.layui.com
6 |
7 | */
8 |
9 | /* 加载就绪标志 */
10 | html #layuicss-skinlayim-mobilecss{display: none; position: absolute; width: 1989px;}
11 |
12 | /* 辅助 */
13 |
14 |
15 | /* 聊天面板 */
16 | .layim-chat{position: fixed; bottom: 0; top: 0; left: 0; right: 0; background-color: #eee;}
17 |
18 | .layim-chat-title{position: fixed; top: 0; left: 0; right: 0; height: 50px; line-height: 50px; text-align: center; background-color: #36373C; color: #fff; font-size: 16px;}
19 | .layim-chat-status{padding-left: 5px; font-size: 14px;}
20 |
21 | .layim-chat-main{position: fixed; width: 100%; bottom: 85px; top: 50px; left: 0; right: 0; padding: 15px; overflow-y: auto; overflow-x: hidden; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}
22 | .layim-chat-main[nonetitle]{top: 0;}
23 | .layim-chat-main ul{overflow-x: hidden;}
24 | .layim-chat-main ul li{position: relative; font-size: 0; margin-bottom: 10px; padding-left: 60px; min-height: 68px;}
25 | .layim-chat-user,
26 | .layim-chat-text{display: inline-block; *display:inline; *zoom:1; vertical-align:top; font-size: 14px;}
27 | .layim-chat-user{position: absolute; left: 3px;}
28 | .layim-chat-user img{width: 40px; height: 40px; border-radius: 100%;}
29 | .layim-chat-user cite{position: absolute; left: 60px; top: -2px; width: 500px; line-height: 24px; font-size: 12px; white-space: nowrap; color: #999; text-align: left; font-style: normal;}
30 | .layim-chat-user cite i{padding-left: 15px; font-style: normal;}
31 | .layim-chat-text{position: relative; min-height: 22px; line-height: 22px; margin-top: 25px; padding: 8px 15px; background-color: #fff; border-radius: 3px; color: #333; word-break: break-all;}
32 | .layim-chat-text:after{content: ''; position: absolute; left: -10px; top: 13px; width: 0; height: 0; border-style: dashed; border-color:transparent; overflow:hidden; border-width: 10px; border-top-style: solid; border-top-color: #fff;}
33 | .layim-chat-text a{color: #33DF83;}
34 | .layim-chat-text img{ max-width: 100%; vertical-align: middle;}
35 | .layui-layim-file,
36 | .layim-chat-text .layui-layim-file{display: block; text-align: center; }
37 | .layim-chat-text .layui-layim-file{color: #333;}
38 | .layui-layim-file:hover{opacity: 0.9}
39 | .layui-layim-file i{font-size: 80px; line-height: 80px;}
40 | .layui-layim-file cite{display: block; line-height: 20px; font-size: 14px;}
41 | .layim-chat-main ul .layim-chat-system{min-height: 0; padding: 0;}
42 |
43 | .layim-chat-main ul .layim-chat-mine{text-align: right; padding-left: 0; padding-right: 60px;}
44 | .layim-chat-mine .layim-chat-user{left: auto; right: 3px;}
45 | .layim-chat-mine .layim-chat-user cite{left: auto; right: 60px; text-align: right;}
46 | .layim-chat-mine .layim-chat-user cite i{padding-left: 0; padding-right: 15px;}
47 | .layim-chat-mine .layim-chat-text{margin-left: 0; text-align: left; background-color: #5FB878; color: #fff;}
48 | .layim-chat-mine .layim-chat-text:after{left: auto; right: -10px; border-top-color: #5FB878;}
49 | .layim-chat-mine .layim-chat-text a{color: #fff;}
50 |
51 | .layim-chat-main ul .layim-chat-system{min-height: 0; margin: 20px 0 5px; padding: 0;}
52 | .layim-chat-system{margin: 10px 0; text-align: center;}
53 | .layim-chat-system span{display: inline-block; line-height: 30px; padding: 0 15px; border-radius: 3px; background-color: #ddd; color: #fff; font-size: 14px;}
54 |
55 | .layim-chat-footer{ position: fixed; bottom: 0; left: 10px; right: 10px; height: 80px;}
56 | .layim-chat-send{display: -webkit-box; display: -webkit-flex; display: flex;}
57 | .layim-chat-send input{-webkit-box-flex: 1; -webkit-flex: 1; flex: 1; height: 36px; padding-left: 5px; border: none 0; background-color: #fff; border-radius: 3px;}
58 | .layim-chat-send button{border-radius: 3px; height: 36px; padding: 0 10px; border: none 0; margin-left: 10px; background-color: #5FB878; color: #fff;}
59 |
60 | .layim-chat-tool{position: relative; width: 100%; overflow-x: auto; padding: 0; height: 38px; line-height: 38px; margin-top: 5px; font-size: 0; white-space: nowrap;}
61 | .layim-chat-tool span{position: relative; margin: 0 10px; display: inline-block; *display:inline; *zoom:1; vertical-align:top; font-size: 24px; cursor: pointer;}
62 | .layim-chat-tool .layim-tool-log{position: absolute; right: 5px; font-size: 14px; }
63 | .layim-tool-log i{position: relative; top: 2px; margin-right: 5px; font-size: 20px; color: #999}
64 | .layim-tool-image input{position: absolute; font-size: 0; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.01; filter: Alpha(opacity=1); cursor: pointer;}
65 |
66 |
67 | .layim-layer{position: fixed; bottom: 85px; left: 10px; right: 10px; margin: 0 auto;}
68 |
69 | .layui-layim-face{position:relative; max-height: 180px; overflow: auto; padding: 10px; font-size: 0;}
70 | .layui-layim-face li{cursor: pointer; display: inline-block; vertical-align: bottom; padding: 5px 2px; text-align: center; width: 10%; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}
71 | .layui-layim-face li img{width: 22px; height: 22px;}
72 |
73 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/skin/logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/skin/logo.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layim/voice/default.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/css/modules/layim/voice/default.wav
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/font/iconfont.eot
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/font/iconfont.ttf
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/font/iconfont.woff
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/0.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/1.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/10.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/10.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/11.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/11.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/12.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/12.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/13.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/13.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/14.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/14.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/15.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/15.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/16.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/16.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/17.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/17.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/18.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/18.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/19.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/19.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/2.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/20.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/20.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/21.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/21.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/22.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/22.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/23.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/24.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/24.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/25.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/25.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/26.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/26.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/27.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/27.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/28.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/28.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/29.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/29.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/3.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/30.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/30.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/31.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/31.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/32.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/32.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/33.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/33.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/34.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/34.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/35.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/35.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/36.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/36.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/37.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/37.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/38.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/38.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/39.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/39.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/4.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/40.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/40.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/41.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/41.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/42.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/42.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/43.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/43.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/44.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/44.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/45.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/45.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/46.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/46.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/47.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/47.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/48.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/48.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/49.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/49.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/5.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/50.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/50.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/51.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/51.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/52.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/52.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/53.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/53.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/54.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/54.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/55.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/55.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/56.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/56.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/57.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/57.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/58.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/58.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/59.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/59.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/6.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/60.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/60.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/61.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/61.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/62.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/62.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/63.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/63.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/64.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/64.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/65.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/65.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/66.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/66.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/67.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/67.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/68.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/68.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/69.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/69.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/7.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/70.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/70.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/71.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/71.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/8.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/layui/images/face/9.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/all-mobile.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:用于打包移动完整版
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define(function(exports){
10 | exports('layui.mobile', layui.v);
11 | });
12 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/all.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:用于打包PC完整版,即包含layui.js和所有模块的完整合并(该文件不会存在于构建后的目录)
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define(function(exports){
10 | var cache = layui.cache;
11 | layui.config({
12 | dir: cache.dir.replace(/lay\/dest\/$/, '')
13 | });
14 | exports('layui.all', layui.v);
15 | });
16 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/code.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:layui.code 代码修饰器
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define('jquery', function(exports){
10 | "use strict";
11 |
12 | var $ = layui.jquery;
13 | var about = 'http://www.layui.com/doc/modules/code.html'; //关于信息
14 |
15 | exports('code', function(options){
16 | var elems = [];
17 | options = options || {};
18 | options.elem = $(options.elem||'.layui-code');
19 | options.about = 'about' in options ? options.about : true;
20 |
21 | options.elem.each(function(){
22 | elems.push(this);
23 | });
24 |
25 | layui.each(elems.reverse(), function(index, item){
26 | var othis = $(item), html = othis.html();
27 |
28 | //转义HTML标签
29 | if(othis.attr('lay-encode') || options.encode){
30 | html = html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
31 | .replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"')
32 | }
33 |
34 | othis.html('- ' + html.replace(/[\r\t\n]+/g, '
- ') + '
')
35 |
36 | if(!othis.find('>.layui-code-h3')[0]){
37 | othis.prepend(''+ (othis.attr('lay-title')||options.title||'code') + (options.about ? 'layui.code' : '') + '
');
38 | }
39 |
40 | var ol = othis.find('>.layui-code-ol');
41 | othis.addClass('layui-box layui-code-view');
42 |
43 | //识别皮肤
44 | if(othis.attr('lay-skin') || options.skin){
45 | othis.addClass('layui-code-' +(othis.attr('lay-skin') || options.skin));
46 | }
47 |
48 | //按行数适配左边距
49 | if((ol.find('li').length/100|0) > 0){
50 | ol.css('margin-left', (ol.find('li').length/100|0) + 'px');
51 | }
52 |
53 | //设置最大高度
54 | if(othis.attr('lay-height') || options.height){
55 | ol.css('max-height', othis.attr('lay-height') || options.height);
56 | }
57 |
58 | });
59 |
60 | });
61 | }).addcss('modules/code.css', 'skincodecss');
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/flow.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:layui.flow 流加载
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 |
10 | layui.define('jquery', function(exports){
11 | "use strict";
12 |
13 | var $ = layui.jquery, Flow = function(options){}
14 | ,ELEM_MORE = 'layui-flow-more'
15 | ,ELEM_LOAD = '';
16 |
17 | //主方法
18 | Flow.prototype.load = function(options){
19 | var that = this, page = 0, lock, isOver, lazyimg, timer;
20 | options = options || {};
21 |
22 | var elem = $(options.elem); if(!elem[0]) return;
23 | var scrollElem = $(options.scrollElem || document); //滚动条所在元素
24 | var mb = options.mb || 50; //与底部的临界距离
25 | var isAuto = 'isAuto' in options ? options.isAuto : true; //是否自动滚动加载
26 | var end = options.end || '没有更多了'; //“末页”显示文案
27 |
28 | //滚动条所在元素是否为document
29 | var notDocment = options.scrollElem && options.scrollElem !== document;
30 |
31 | //加载更多
32 | var ELEM_TEXT = '加载更多'
33 | ,more = $('');
34 |
35 | if(!elem.find('.layui-flow-more')[0]){
36 | elem.append(more);
37 | }
38 |
39 | //加载下一个元素
40 | var next = function(html, over){
41 | html = $(html);
42 | more.before(html);
43 | over = over == 0 ? true : null;
44 | over ? more.html(end) : more.find('a').html(ELEM_TEXT);
45 | isOver = over;
46 | lock = null;
47 | lazyimg && lazyimg();
48 | };
49 |
50 | //触发请求
51 | var done = function(){
52 | lock = true;
53 | more.find('a').html(ELEM_LOAD);
54 | typeof options.done === 'function' && options.done(++page, next);
55 | };
56 |
57 | done();
58 |
59 | //不自动滚动加载
60 | more.find('a').on('click', function(){
61 | var othis = $(this);
62 | if(isOver) return;
63 | lock || done();
64 | });
65 |
66 | //如果允许图片懒加载
67 | if(options.isLazyimg){
68 | var lazyimg = that.lazyimg({
69 | elem: options.elem + ' img'
70 | ,scrollElem: options.scrollElem
71 | });
72 | }
73 |
74 | if(!isAuto) return that;
75 |
76 | scrollElem.on('scroll', function(){
77 | var othis = $(this), top = othis.scrollTop();
78 |
79 | if(timer) clearTimeout(timer);
80 | if(isOver) return;
81 |
82 | timer = setTimeout(function(){
83 | //计算滚动所在容器的可视高度
84 | var height = notDocment ? othis.height() : $(window).height();
85 |
86 | //计算滚动所在容器的实际高度
87 | var scrollHeight = notDocment
88 | ? othis.prop('scrollHeight')
89 | : document.documentElement.scrollHeight;
90 |
91 | //临界点
92 | if(scrollHeight - top - height <= mb){
93 | lock || done();
94 | }
95 | }, 100);
96 | });
97 | return that;
98 | };
99 |
100 | //图片懒加载
101 | Flow.prototype.lazyimg = function(options){
102 | var that = this, index = 0, haveScroll;
103 | options = options || {};
104 |
105 | var scrollElem = $(options.scrollElem || document); //滚动条所在元素
106 | var elem = options.elem || 'img';
107 |
108 | //滚动条所在元素是否为document
109 | var notDocment = options.scrollElem && options.scrollElem !== document;
110 |
111 | //显示图片
112 | var show = function(item, height){
113 | var start = scrollElem.scrollTop(), end = start + height;
114 | var elemTop = notDocment ? function(){
115 | return item.offset().top - scrollElem.offset().top + start;
116 | }() : item.offset().top;
117 |
118 | /* 始终只加载在当前屏范围内的图片 */
119 | if(elemTop >= start && elemTop <= end){
120 | if(!item.attr('src')){
121 | var src = item.attr('lay-src');
122 | layui.img(src, function(){
123 | var next = that.lazyimg.elem.eq(index);
124 | item.attr('src', src).removeAttr('lay-src');
125 |
126 | /* 当前图片加载就绪后,检测下一个图片是否在当前屏 */
127 | next[0] && render(next);
128 | index++;
129 | });
130 | }
131 | }
132 | }, render = function(othis, scroll){
133 |
134 | //计算滚动所在容器的可视高度
135 | var height = notDocment ? (scroll||scrollElem).height() : $(window).height();
136 | var start = scrollElem.scrollTop(), end = start + height;
137 |
138 | that.lazyimg.elem = $(elem);
139 |
140 | if(othis){
141 | show(othis, height);
142 | } else {
143 | //计算未加载过的图片
144 | for(var i = 0; i < that.lazyimg.elem.length; i++){
145 | var item = that.lazyimg.elem.eq(i), elemTop = notDocment ? function(){
146 | return item.offset().top - scrollElem.offset().top + start;
147 | }() : item.offset().top;
148 |
149 | show(item, height);
150 | index = i;
151 |
152 | //如果图片的top坐标,超出了当前屏,则终止后续图片的遍历
153 | if(elemTop > end) break;
154 | }
155 | }
156 | };
157 |
158 | render();
159 |
160 | if(!haveScroll){
161 | var timer;
162 | scrollElem.on('scroll', function(){
163 | var othis = $(this);
164 | if(timer) clearTimeout(timer)
165 | timer = setTimeout(function(){
166 | render(null, othis);
167 | }, 50);
168 | });
169 | haveScroll = true;
170 | }
171 | return render;
172 | };
173 |
174 | //暴露接口
175 | exports('flow', new Flow());
176 | });
177 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/laytpl.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name : layui.laytpl 模板引擎
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define(function(exports){
10 |
11 | "use strict";
12 |
13 | var config = {
14 | open: '{{',
15 | close: '}}'
16 | };
17 |
18 | var tool = {
19 | exp: function(str){
20 | return new RegExp(str, 'g');
21 | },
22 | //匹配满足规则内容
23 | query: function(type, _, __){
24 | var types = [
25 | '#([\\s\\S])+?', //js语句
26 | '([^{#}])*?' //普通字段
27 | ][type || 0];
28 | return exp((_||'') + config.open + types + config.close + (__||''));
29 | },
30 | escape: function(html){
31 | return String(html||'').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
32 | .replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"');
33 | },
34 | error: function(e, tplog){
35 | var error = 'Laytpl Error:';
36 | typeof console === 'object' && console.error(error + e + '\n'+ (tplog || ''));
37 | return error + e;
38 | }
39 | };
40 |
41 | var exp = tool.exp, Tpl = function(tpl){
42 | this.tpl = tpl;
43 | };
44 |
45 | Tpl.pt = Tpl.prototype;
46 |
47 | window.errors = 0;
48 |
49 | //编译模版
50 | Tpl.pt.parse = function(tpl, data){
51 | var that = this, tplog = tpl;
52 | var jss = exp('^'+config.open+'#', ''), jsse = exp(config.close+'$', '');
53 |
54 | tpl = tpl.replace(/\s+|\r|\t|\n/g, ' ').replace(exp(config.open+'#'), config.open+'# ')
55 |
56 | .replace(exp(config.close+'}'), '} '+config.close).replace(/\\/g, '\\\\')
57 |
58 | .replace(/(?="|')/g, '\\').replace(tool.query(), function(str){
59 | str = str.replace(jss, '').replace(jsse, '');
60 | return '";' + str.replace(/\\/g, '') + ';view+="';
61 | })
62 |
63 | .replace(tool.query(1), function(str){
64 | var start = '"+(';
65 | if(str.replace(/\s/g, '') === config.open+config.close){
66 | return '';
67 | }
68 | str = str.replace(exp(config.open+'|'+config.close), '');
69 | if(/^=/.test(str)){
70 | str = str.replace(/^=/, '');
71 | start = '"+_escape_(';
72 | }
73 | return start + str.replace(/\\/g, '') + ')+"';
74 | });
75 |
76 | tpl = '"use strict";var view = "' + tpl + '";return view;';
77 |
78 | try{
79 | that.cache = tpl = new Function('d, _escape_', tpl);
80 | return tpl(data, tool.escape);
81 | } catch(e){
82 | delete that.cache;
83 | return tool.error(e, tplog);
84 | }
85 | };
86 |
87 | Tpl.pt.render = function(data, callback){
88 | var that = this, tpl;
89 | if(!data) return tool.error('no data');
90 | tpl = that.cache ? that.cache(data, tool.escape) : that.parse(that.tpl, data);
91 | if(!callback) return tpl;
92 | callback(tpl);
93 | };
94 |
95 | var laytpl = function(tpl){
96 | if(typeof tpl !== 'string') return tool.error('Template not found');
97 | return new Tpl(tpl);
98 | };
99 |
100 | laytpl.config = function(options){
101 | options = options || {};
102 | for(var i in options){
103 | config[i] = options[i];
104 | }
105 | };
106 |
107 | laytpl.v = '1.2.0';
108 |
109 | exports('laytpl', laytpl);
110 |
111 | });
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/mobile.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:layui 移动模块入口 | 构建后则为移动模块集合
4 | @Author:贤心
5 | @License:MIT
6 |
7 | */
8 |
9 |
10 | if(!layui['layui.mobile']){
11 | layui.config({
12 | base: layui.cache.dir + 'lay/modules/mobile/'
13 | }).extend({
14 | 'layer-mobile': 'layer-mobile'
15 | ,'zepto': 'zepto'
16 | ,'upload-mobile': 'upload-mobile'
17 | ,'layim-mobile': 'layim-mobile'
18 | });
19 | }
20 |
21 | layui.define([
22 | 'layer-mobile'
23 | ,'zepto'
24 | ,'layim-mobile'
25 | ], function(exports){
26 | exports('mobile', {
27 | layer: layui['layer-mobile'] //弹层
28 | ,layim: layui['layim-mobile'] //WebIM
29 | });
30 | });
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/mobile/layer-mobile.js:
--------------------------------------------------------------------------------
1 | /*!
2 |
3 | @Name:layer mobile v2.0 弹层组件移动版
4 | @Author:贤心
5 | @Site:http://layer.layui.com/mobie/
6 | @License:LGPL
7 |
8 | */
9 |
10 | layui.define(function(exports){
11 |
12 | "use strict";
13 |
14 | var win = window, doc = document, query = 'querySelectorAll', claname = 'getElementsByClassName', S = function(s){
15 | return doc[query](s);
16 | };
17 |
18 | //默认配置
19 | var config = {
20 | type: 0
21 | ,shade: true
22 | ,shadeClose: true
23 | ,fixed: true
24 | ,anim: 'scale' //默认动画类型
25 | };
26 |
27 | var ready = {
28 | extend: function(obj){
29 | var newobj = JSON.parse(JSON.stringify(config));
30 | for(var i in obj){
31 | newobj[i] = obj[i];
32 | }
33 | return newobj;
34 | },
35 | timer: {}, end: {}
36 | };
37 |
38 | //点触事件
39 | ready.touch = function(elem, fn){
40 | elem.addEventListener('click', function(e){
41 | fn.call(this, e);
42 | }, false);
43 | };
44 |
45 | var index = 0, classs = ['layui-m-layer'], Layer = function(options){
46 | var that = this;
47 | that.config = ready.extend(options);
48 | that.view();
49 | };
50 |
51 | Layer.prototype.view = function(){
52 | var that = this, config = that.config, layerbox = doc.createElement('div');
53 |
54 | that.id = layerbox.id = classs[0] + index;
55 | layerbox.setAttribute('class', classs[0] + ' ' + classs[0]+(config.type || 0));
56 | layerbox.setAttribute('index', index);
57 |
58 | //标题区域
59 | var title = (function(){
60 | var titype = typeof config.title === 'object';
61 | return config.title
62 | ? ''+ (titype ? config.title[0] : config.title) +'
'
63 | : '';
64 | }());
65 |
66 | //按钮区域
67 | var button = (function(){
68 | typeof config.btn === 'string' && (config.btn = [config.btn]);
69 | var btns = (config.btn || []).length, btndom;
70 | if(btns === 0 || !config.btn){
71 | return '';
72 | }
73 | btndom = ''+ config.btn[0] +''
74 | if(btns === 2){
75 | btndom = ''+ config.btn[1] +'' + btndom;
76 | }
77 | return ''+ btndom + '
';
78 | }());
79 |
80 | if(!config.fixed){
81 | config.top = config.hasOwnProperty('top') ? config.top : 100;
82 | config.style = config.style || '';
83 | config.style += ' top:'+ ( doc.body.scrollTop + config.top) + 'px';
84 | }
85 |
86 | if(config.type === 2){
87 | config.content = ''+ (config.content||'') +'
';
88 | }
89 |
90 | if(config.skin) config.anim = 'up';
91 | if(config.skin === 'msg') config.shade = false;
92 |
93 | layerbox.innerHTML = (config.shade ? '' : '')
94 | +''
95 | +'
'
96 | +'
'
97 | + title
98 | +'
'+ config.content +'
'
99 | + button
100 | +'
'
101 | +'
'
102 | +'
';
103 |
104 | if(!config.type || config.type === 2){
105 | var dialogs = doc[claname](classs[0] + config.type), dialen = dialogs.length;
106 | if(dialen >= 1){
107 | layer.close(dialogs[0].getAttribute('index'))
108 | }
109 | }
110 |
111 | document.body.appendChild(layerbox);
112 | var elem = that.elem = S('#'+that.id)[0];
113 | config.success && config.success(elem);
114 |
115 | that.index = index++;
116 | that.action(config, elem);
117 | };
118 |
119 | Layer.prototype.action = function(config, elem){
120 | var that = this;
121 |
122 | //自动关闭
123 | if(config.time){
124 | ready.timer[that.index] = setTimeout(function(){
125 | layer.close(that.index);
126 | }, config.time*1000);
127 | }
128 |
129 | //确认取消
130 | var btn = function(){
131 | var type = this.getAttribute('type');
132 | if(type == 0){
133 | config.no && config.no();
134 | layer.close(that.index);
135 | } else {
136 | config.yes ? config.yes(that.index) : layer.close(that.index);
137 | }
138 | };
139 | if(config.btn){
140 | var btns = elem[claname]('layui-m-layerbtn')[0].children, btnlen = btns.length;
141 | for(var ii = 0; ii < btnlen; ii++){
142 | ready.touch(btns[ii], btn);
143 | }
144 | }
145 |
146 | //点遮罩关闭
147 | if(config.shade && config.shadeClose){
148 | var shade = elem[claname]('layui-m-layershade')[0];
149 | ready.touch(shade, function(){
150 | layer.close(that.index, config.end);
151 | });
152 | }
153 |
154 | config.end && (ready.end[that.index] = config.end);
155 | };
156 |
157 | var layer = {
158 | v: '2.0 m',
159 | index: index,
160 |
161 | //核心方法
162 | open: function(options){
163 | var o = new Layer(options || {});
164 | return o.index;
165 | },
166 |
167 | close: function(index){
168 | var ibox = S('#'+classs[0]+index)[0];
169 | if(!ibox) return;
170 | ibox.innerHTML = '';
171 | doc.body.removeChild(ibox);
172 | clearTimeout(ready.timer[index]);
173 | delete ready.timer[index];
174 | typeof ready.end[index] === 'function' && ready.end[index]();
175 | delete ready.end[index];
176 | },
177 |
178 | //关闭所有layer层
179 | closeAll: function(){
180 | var boxs = doc[claname](classs[0]);
181 | for(var i = 0, len = boxs.length; i < len; i++){
182 | layer.close((boxs[0].getAttribute('index')|0));
183 | }
184 | }
185 | };
186 |
187 | exports('layer-mobile', layer);
188 |
189 | });
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/mobile/layim-mobile-open.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:layim mobile 开源包
4 | @Author:贤心
5 | @License:MIT
6 |
7 | */
8 |
9 | layui.define(function(exports){
10 | exports('layim-mobile', layui.v);
11 | });
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/mobile/upload-mobile.js:
--------------------------------------------------------------------------------
1 | /*!
2 |
3 | @Title: layui.upload 单文件上传 - 全浏览器兼容版
4 | @Author: 贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define(['layer-mobile', 'zepto'] , function(exports){
10 | "use strict";
11 |
12 | var $ = layui.zepto;
13 | var layer = layui['layer-mobile'];
14 | var device = layui.device();
15 |
16 | var elemDragEnter = 'layui-upload-enter';
17 | var elemIframe = 'layui-upload-iframe';
18 |
19 | var msgConf = {
20 | icon: 2
21 | ,shift: 6
22 | }, fileType = {
23 | file: '文件'
24 | ,video: '视频'
25 | ,audio: '音频'
26 | };
27 |
28 | layer.msg = function(content){
29 | return layer.open({
30 | content: content || ''
31 | ,skin: 'msg'
32 | ,time: 0 //2秒后自动关闭
33 | });
34 | };
35 |
36 | var Upload = function(options){
37 | this.options = options;
38 | };
39 |
40 | //初始化渲染
41 | Upload.prototype.init = function(){
42 | var that = this, options = that.options;
43 | var body = $('body'), elem = $(options.elem || '.layui-upload-file');
44 | var iframe = $('');
45 |
46 | //插入iframe
47 | $('#'+elemIframe)[0] || body.append(iframe);
48 |
49 | return elem.each(function(index, item){
50 | item = $(item);
51 | var form = '';
52 |
53 | var type = item.attr('lay-type') || options.type; //获取文件类型
54 |
55 | //包裹ui元素
56 | if(!options.unwrap){
57 | form = '' + form + ''+ (
58 | item.attr('lay-title') || options.title|| ('上传'+ (fileType[type]||'图片') )
59 | ) +'
';
60 | }
61 |
62 | form = $(form);
63 |
64 | //拖拽支持
65 | if(!options.unwrap){
66 | form.on('dragover', function(e){
67 | e.preventDefault();
68 | $(this).addClass(elemDragEnter);
69 | }).on('dragleave', function(){
70 | $(this).removeClass(elemDragEnter);
71 | }).on('drop', function(){
72 | $(this).removeClass(elemDragEnter);
73 | });
74 | }
75 |
76 | //如果已经实例化,则移除包裹元素
77 | if(item.parent('form').attr('target') === elemIframe){
78 | if(options.unwrap){
79 | item.unwrap();
80 | } else {
81 | item.parent().next().remove();
82 | item.unwrap().unwrap();
83 | }
84 | };
85 |
86 | //包裹元素
87 | item.wrap(form);
88 |
89 | //触发上传
90 | item.off('change').on('change', function(){
91 | that.action(this, type);
92 | });
93 | });
94 | };
95 |
96 | //提交上传
97 | Upload.prototype.action = function(input, type){
98 | var that = this, options = that.options, val = input.value;
99 | var item = $(input), ext = item.attr('lay-ext') || options.ext || ''; //获取支持上传的文件扩展名;
100 |
101 | if(!val){
102 | return;
103 | };
104 |
105 | //校验文件
106 | switch(type){
107 | case 'file': //一般文件
108 | if(ext && !RegExp('\\w\\.('+ ext +')$', 'i').test(escape(val))){
109 | layer.msg('不支持该文件格式', msgConf);
110 | return input.value = '';
111 | }
112 | break;
113 | case 'video': //视频文件
114 | if(!RegExp('\\w\\.('+ (ext||'avi|mp4|wma|rmvb|rm|flash|3gp|flv') +')$', 'i').test(escape(val))){
115 | layer.msg('不支持该视频格式', msgConf);
116 | return input.value = '';
117 | }
118 | break;
119 | case 'audio': //音频文件
120 | if(!RegExp('\\w\\.('+ (ext||'mp3|wav|mid') +')$', 'i').test(escape(val))){
121 | layer.msg('不支持该音频格式', msgConf);
122 | return input.value = '';
123 | }
124 | break;
125 | default: //图片文件
126 | if(!RegExp('\\w\\.('+ (ext||'jpg|png|gif|bmp|jpeg') +')$', 'i').test(escape(val))){
127 | layer.msg('不支持该图片格式', msgConf);
128 | return input.value = '';
129 | }
130 | break;
131 | }
132 |
133 | options.before && options.before(input);
134 | item.parent().submit();
135 |
136 | var iframe = $('#'+elemIframe), timer = setInterval(function() {
137 | var res;
138 | try {
139 | res = iframe.contents().find('body').text();
140 | } catch(e) {
141 | layer.msg('上传接口存在跨域', msgConf);
142 | clearInterval(timer);
143 | }
144 | if(res){
145 | clearInterval(timer);
146 | iframe.contents().find('body').html('');
147 | try {
148 | res = JSON.parse(res);
149 | } catch(e){
150 | res = {};
151 | return layer.msg('请对上传接口返回JSON字符', msgConf);
152 | }
153 | typeof options.success === 'function' && options.success(res, input);
154 | }
155 | }, 30);
156 |
157 | input.value = '';
158 | };
159 |
160 | //暴露接口
161 | exports('upload-mobile', function(options){
162 | var upload = new Upload(options = options || {});
163 | upload.init();
164 | });
165 | });
166 |
167 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/upload.js:
--------------------------------------------------------------------------------
1 | /*!
2 |
3 | @Title: layui.upload 单文件上传 - 全浏览器兼容版
4 | @Author: 贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define('layer' , function(exports){
10 | "use strict";
11 |
12 | var $ = layui.jquery;
13 | var layer = layui.layer;
14 | var device = layui.device();
15 |
16 | var elemDragEnter = 'layui-upload-enter';
17 | var elemIframe = 'layui-upload-iframe';
18 |
19 | var msgConf = {
20 | icon: 2
21 | ,shift: 6
22 | }, fileType = {
23 | file: '文件'
24 | ,video: '视频'
25 | ,audio: '音频'
26 | };
27 |
28 | var Upload = function(options){
29 | this.options = options;
30 | };
31 |
32 | //初始化渲染
33 | Upload.prototype.init = function(){
34 | var that = this, options = that.options;
35 | var body = $('body'), elem = $(options.elem || '.layui-upload-file');
36 | var iframe = $('');
37 |
38 | //插入iframe
39 | $('#'+elemIframe)[0] || body.append(iframe);
40 |
41 | return elem.each(function(index, item){
42 | item = $(item);
43 | var form = '';
44 |
45 | var type = item.attr('lay-type') || options.type; //获取文件类型
46 |
47 | //包裹ui元素
48 | if(!options.unwrap){
49 | form = '' + form + ''+ (
50 | item.attr('lay-title') || options.title|| ('上传'+ (fileType[type]||'图片') )
51 | ) +'
';
52 | }
53 |
54 | form = $(form);
55 |
56 | //拖拽支持
57 | if(!options.unwrap){
58 | form.on('dragover', function(e){
59 | e.preventDefault();
60 | $(this).addClass(elemDragEnter);
61 | }).on('dragleave', function(){
62 | $(this).removeClass(elemDragEnter);
63 | }).on('drop', function(){
64 | $(this).removeClass(elemDragEnter);
65 | });
66 | }
67 |
68 | //如果已经实例化,则移除包裹元素
69 | if(item.parent('form').attr('target') === elemIframe){
70 | if(options.unwrap){
71 | item.unwrap();
72 | } else {
73 | item.parent().next().remove();
74 | item.unwrap().unwrap();
75 | }
76 | };
77 |
78 | //包裹元素
79 | item.wrap(form);
80 |
81 | //触发上传
82 | item.off('change').on('change', function(){
83 | that.action(this, type);
84 | });
85 | });
86 | };
87 |
88 | //提交上传
89 | Upload.prototype.action = function(input, type){
90 | var that = this, options = that.options, val = input.value;
91 | var item = $(input), ext = item.attr('lay-ext') || options.ext || ''; //获取支持上传的文件扩展名;
92 |
93 | if(!val){
94 | return;
95 | };
96 |
97 | //校验文件
98 | switch(type){
99 | case 'file': //一般文件
100 | if(ext && !RegExp('\\w\\.('+ ext +')$', 'i').test(escape(val))){
101 | layer.msg('不支持该文件格式', msgConf);
102 | return input.value = '';
103 | }
104 | break;
105 | case 'video': //视频文件
106 | if(!RegExp('\\w\\.('+ (ext||'avi|mp4|wma|rmvb|rm|flash|3gp|flv') +')$', 'i').test(escape(val))){
107 | layer.msg('不支持该视频格式', msgConf);
108 | return input.value = '';
109 | }
110 | break;
111 | case 'audio': //音频文件
112 | if(!RegExp('\\w\\.('+ (ext||'mp3|wav|mid') +')$', 'i').test(escape(val))){
113 | layer.msg('不支持该音频格式', msgConf);
114 | return input.value = '';
115 | }
116 | break;
117 | default: //图片文件
118 | if(!RegExp('\\w\\.('+ (ext||'jpg|png|gif|bmp|jpeg') +')$', 'i').test(escape(val))){
119 | layer.msg('不支持该图片格式', msgConf);
120 | return input.value = '';
121 | }
122 | break;
123 | }
124 |
125 | options.before && options.before(input);
126 | item.parent().submit();
127 |
128 | var iframe = $('#'+elemIframe), timer = setInterval(function() {
129 | var res;
130 | try {
131 | res = iframe.contents().find('body').text();
132 | } catch(e) {
133 | layer.msg('上传接口存在跨域', msgConf);
134 | clearInterval(timer);
135 | }
136 | if(res){
137 | clearInterval(timer);
138 | iframe.contents().find('body').html('');
139 | try {
140 | res = JSON.parse(res);
141 | } catch(e){
142 | res = {};
143 | return layer.msg('请对上传接口返回JSON字符', msgConf);
144 | }
145 | typeof options.success === 'function' && options.success(res, input);
146 | }
147 | }, 30);
148 |
149 | input.value = '';
150 | };
151 |
152 | //暴露接口
153 | exports('upload', function(options){
154 | var upload = new Upload(options = options || {});
155 | upload.init();
156 | });
157 | });
158 |
159 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/util.js:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name:layui.util 工具集
4 | @Author:贤心
5 | @License:LGPL
6 |
7 | */
8 |
9 | layui.define('jquery', function(exports){
10 | "use strict";
11 |
12 | var $ = layui.jquery
13 |
14 | ,util = {
15 | //固定块
16 | fixbar: function(options){
17 | options = options || {};
18 | options.bgcolor = options.bgcolor ? ('background-color:' + options.bgcolor) : '';
19 |
20 | var TOP_BAR = 'layui-fixbar-top', timer, is, icon = [
21 | options.bar1 === true ? '' : options.bar1 //bar1 - 信息图标
22 | ,options.bar2 === true ? '' : options.bar2 //bar2 - 问号图标
23 | ,'' //置顶
24 | ]
25 |
26 | ,dom = $([''
27 | ,options.bar1 ? '- '+ icon[0] +'
' : ''
28 | ,options.bar2 ? '- '+ icon[1] +'
' : ''
29 | ,'- '+ icon[2] +'
'
30 | ,'
'].join(''))
31 |
32 | ,topbar = dom.find('.'+TOP_BAR)
33 |
34 | ,scroll = function(){
35 | var stop = $(document).scrollTop();
36 | if(stop >= (options.showHeight || 200)){
37 | is || (topbar.show(), is = 1);
38 | } else {
39 | is && (topbar.hide(), is = 0);
40 | }
41 | };
42 |
43 | if($('.layui-fixbar')[0]) return;
44 | typeof options.css === 'object' && (dom.css(options.css));
45 | $('body').append(dom), scroll();
46 |
47 | //bar点击事件
48 | dom.find('li').on('click', function(){
49 | var othis = $(this), type = othis.attr('lay-type');
50 | if(type === 'top'){
51 | $('html,body').animate({
52 | scrollTop : 0
53 | }, 200);;
54 | }
55 | options.click && options.click.call(this, type);
56 | });
57 |
58 | //Top显示控制
59 | $(document).on('scroll', function(){
60 | if(timer) clearTimeout(timer);
61 | timer = setTimeout(function(){
62 | scroll();
63 | }, 100);
64 | });
65 | }
66 | };
67 |
68 | exports('util', util);
69 | });
--------------------------------------------------------------------------------
/src/main/resources/static/layui/更新日志.txt:
--------------------------------------------------------------------------------
1 |
2 | # v3.0.1 Pro版 2016.12.10
3 |
4 | * 扩展工具栏的事件体增加第二个参数:send,用于自动发送,而不是插入到编辑器中。
5 | * 扩展工具栏的事件体增加第三个参数:obj,用于获得当前聊天窗口的elem、data等数据
6 | * layim.getMessage() 增加了消息id:cid参数的支持,会赋值在li的data-cid上,以便完成一些消息的操作(如撤回)
7 | * layim.getMessage() 增加了fromid参数,即消息来源者的id,可用于自动解决浏览器多窗口时的一些问题
8 |
9 | * 修复打开多浏览器窗口时,聊天记录重复保存的bug
10 | * 修复移动版点击图片和文件上传报错的bug
11 | * 解决上传部分格式的文件,点击时直接被浏览器预览而无法下载的问题
12 |
13 |
14 | ---
15 |
16 | # v3.0 Pro版 2016.12.07
17 |
18 | * 最新Layui提供强力支撑
19 | * 新增聊天面板最大化显示功能
20 | * 新增聊天面板拖拽右下角调整窗口大小功能,是不是碉堡了 ^_^
21 | * 内置LayIM移动端会话界面,接口与PC版几乎完全一致
22 |
23 | * 新增扩展聊天面板工具栏接口
24 | * 新增桌面消息提醒功能(即浏览器之外的提醒)
25 | * 新增消息声音提醒功能
26 | * 新增添加好友/群组的弹出面板
27 | * 新增“消息盒子”、“聊天记录”的内置模版
28 | * 新增“消息盒子”消息数提醒功能(仅限好友、群组申请的系统消息)
29 | * 新增主面板直接修改签名功能
30 | * 新增好友聊天面板的状态区域,通过方法layim.setChatStatus(str),可用于显示:对方输入状态、在线离线状态等
31 | * 新增聊天区域的系统消息支持,如:xxx加入群 等。(该功能需在聊天窗口打开状态才会显示其内)
32 | * 新增群聊面板的群员私聊会话支持
33 | * 新增好友置灰、和取消置灰接口
34 | * 新增主面板底部“消息盒子”入口
35 | * 新增了一套内置的背景图
36 | * 新增layim.config()参数tool,用于扩展聊天面板工具栏
37 | * 新增layim.config()参数initSkin,用于初始时默认背景的设置
38 | * 新增layim.config()参数notice,用于控制是否开启桌面消息提醒,默认开启
39 | * 新增layim.config()参数voice,用于设置消息声音源,默认播放内置声音。若不开启,设置 false即可
40 |
41 | * 图片和文件改为上传成功即自动发送
42 | * layim.config()的init参数支持直接赋值列表数据,且对ajax接口配置方式仍然支持
43 | * 剔除layim.config()的mine参数,通过init中配置mine取代
44 | * init初始化信息的friend集合中,新增了status字段,若值为offline代表离线,online为在线
45 | * 优化消息快捷键的相关代码
46 | * 去除面板上双击的默认选中蓝色背景
47 | * 诸多样式细节的完善
48 |
49 |
--------------------------------------------------------------------------------
/src/main/resources/static/layui/说明.txt:
--------------------------------------------------------------------------------
1 | ===============
2 | 目录说明
3 | ===============
4 |
5 | ./layui 目录下是经过压缩后的代码(包括LayIM)
6 | ./source/layui 目录下Layui源代码(包括LayIM的源代码,标准版无此目录)
7 |
8 | ===============
9 | 使用说明
10 | ===============
11 |
12 | LayIM基于layui模块体系,因此你获得的其实是一个包含LayIM的layui框架,不同的是,开源版的layui并不包含LayIM。捐助后,将您获得的压缩包解压,将layui整个目录文件放入你的项目后,不用再对其代码做任何修改(方便下次升级)。然后您只需引入下述两个文件即可。
13 |
14 | ./layui/css/layui.css
15 | ./layui/layui.js
16 |
17 |
18 | ===============
19 | 官网文档
20 | ===============
21 |
22 | 官网:http://layim.layui.com/
23 | 接口文档:http://www.layui.com/doc/layim.html
24 | 授权通道:http://fly.layui.com/auth/get/
25 |
26 |
27 | ===============
28 | 关于版权
29 | ===============
30 |
31 | LayIM目前并非开源产品(以后也许会开源),因此如果你是通过捐助渠道获得LayIM,可以通过layer.config设定copyright: true来剔除LayIM主面板的关于信息,这就表示你已经过授权。当然,如果你想友好地保留,我们也是非常欢迎的。如果你通过非捐助渠道获得LayIM,我们并不会进行追究,但是请勿进行销售,这是唯一的红线吧。
32 |
33 | 另外,再次强调一点:LayIM虽然并不开源,但layui是完全免费且开源的。LayIM是我们为数不多的接受收费的产品。因为一定资金的来源,是对我们整个开发流可持续发展的有力保障。仍然是那句话,如果你对LayIM的“收费”表示厌恶,请忽视它的存在。即便是没有一个人为LayIM买单,我们仍然会坚持初衷,即:通过极简的体验,拉近你的用户在web间的距离。
34 |
35 | LayIM的作者是贤心一人,版权最终解释权归他所有。
36 |
37 |
--------------------------------------------------------------------------------
/src/main/resources/static/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | LayIM 登陆
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
48 |
82 |
83 |
--------------------------------------------------------------------------------
/src/main/resources/static/protobuf/gps_data.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | message gps_data {
4 | int64 id = 1;
5 | string terminalId = 2;
6 | string dataTime = 3;
7 | double lon = 4;
8 | double lat = 5;
9 | float speed = 6;
10 | int32 altitude = 7;
11 | int32 locType = 8;
12 | int32 gpsStatus = 9;
13 | float direction = 10;
14 | int32 satellite = 11;
15 | }
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg1_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg1_small.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg2_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg2_small.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg3_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg3_small.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg4_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg4_small.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/themes/bg5_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/githuanl/spring-boot-netty-socket.io---chat/6dc439f9e22f120b883b44acc9b14eafa2745529/src/main/resources/static/themes/bg5_small.jpg
--------------------------------------------------------------------------------
/src/test/java/com/neo/ApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.neo;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.boot.test.context.SpringBootTest;
6 | import org.springframework.test.context.junit4.SpringRunner;
7 |
8 | @RunWith(SpringRunner.class)
9 | @SpringBootTest
10 | public class ApplicationTests {
11 |
12 | @Test
13 | public void contextLoads() {
14 | System.out.println("hello world");
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/test/java/com/neo/dao/UserDaoTest.java:
--------------------------------------------------------------------------------
1 | package com.neo.dao;
2 |
3 | import com.google.protobuf.InvalidProtocolBufferException;
4 | import com.neo.entity.GpsData;
5 | import com.neo.entity.GroupEntity;
6 | import com.neo.entity.UserEntity;
7 | import com.neo.serivce.GroupSerivice;
8 | import com.neo.serivce.UserSerivice;
9 | import org.junit.Test;
10 | import org.junit.runner.RunWith;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.boot.test.context.SpringBootTest;
13 | import org.springframework.test.context.junit4.SpringRunner;
14 |
15 | import javax.servlet.http.HttpSession;
16 |
17 | /**
18 | * Created by summer on 2017/5/5.
19 | */
20 | @RunWith(SpringRunner.class)
21 | @SpringBootTest
22 | public class UserDaoTest {
23 |
24 | @Autowired
25 | private UserSerivice serivice;
26 |
27 | @Autowired
28 | private GroupSerivice groupSerivice;
29 |
30 | @Autowired
31 | protected HttpSession session;
32 |
33 | @Test
34 | public void testSaveUser() throws Exception {
35 |
36 |
37 | UserEntity user = serivice.register("123", "111", "http://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg");
38 | System.out.println("已生成ID:" + user.getId());
39 | user = serivice.register("111", "111", "http://tva4.sinaimg.cn/crop.0.1.1125.1125.180/475bb144jw8f9nwebnuhkj20v90vbwh9.jpg");
40 | System.out.println("已生成ID:" + user.getId());
41 | user = serivice.register("马云", "111", "http://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg");
42 | System.out.println("已生成ID:" + user.getId());
43 |
44 | user = serivice.register("刘流", "111", "http://tva1.sinaimg.cn/crop.0.0.512.512.180/6a4acad5jw8eqi6yaholjj20e80e8t9f.jpg");
45 | System.out.println("已生成ID======:" + user.getId());
46 |
47 | creatGroup();
48 |
49 | }
50 |
51 | public void creatGroup() throws Exception {
52 | // UserEntity user = new UserEntity();
53 | // user.setAuth_token(UUID.randomUUID().toString());
54 | // user.setUsername("90905555");
55 | // user.setPassword("456");
56 | // serivice.saveEntity(user);
57 |
58 | UserEntity user = serivice.findUserByUserName("123");
59 | session.setAttribute("username", user);
60 |
61 | GroupEntity entity = groupSerivice.creatGroup("前端群", "http://tva1.sinaimg.cn/crop.0.0.200.200.50/006q8Q6bjw8f20zsdem2mj305k05kdfw.jpg", user);
62 | System.out.println("已生成ID:" + entity.getId());
63 |
64 | entity = groupSerivice.creatGroup("后端群", "http://tva2.sinaimg.cn/crop.0.0.199.199.180/005Zseqhjw1eplix1brxxj305k05kjrf.jpg", user);
65 | System.out.println("已生成ID:" + entity.getId());
66 |
67 | entity = groupSerivice.creatGroup("UI设计", "http://tva2.sinaimg.cn/crop.0.8.751.751.180/961a9be5jw8fczq7q98i7j20kv0lcwfn.jpg", user);
68 | System.out.println("已生成ID:" + entity.getId());
69 |
70 | }
71 |
72 |
73 | @Test
74 | public void testProutobu() throws InvalidProtocolBufferException {
75 | //模拟将对象转成byte[],方便传输
76 | GpsData.gps_data.Builder builder = GpsData.gps_data.newBuilder();
77 | builder.setId(1);
78 | builder.setDataTime("2018-07-03");
79 | GpsData.gps_data bd = builder.build();
80 | System.out.println("before :"+ bd.toString());
81 |
82 | System.out.println("===========Person Byte==========");
83 | for(byte b : bd.toByteArray()){
84 | System.out.print(b);
85 | }
86 | System.out.println();
87 | System.out.println(bd.toByteString());
88 | System.out.println("================================");
89 |
90 | //模拟接收Byte[],反序列化成Person类
91 | byte[] byteArray =bd.toByteArray();
92 | GpsData.gps_data gps_data = GpsData.gps_data.parseFrom(byteArray);
93 | System.out.println("after :" +gps_data.toString());
94 | }
95 |
96 |
97 | }
98 |
--------------------------------------------------------------------------------