评论里留下邮箱[担心爬虫,可以用 base64 加密],每天晚上 /早上我争取把视频发过去 -_-! (希望有妹子哈~~)。
001-zinx 课程简介.wmv
002-基于 zinx 框架的服务器应用演示.wmv
003-zinxV0.1-基础 server 模块定义.wmv
004-zinxV0.1-基础 server 模块启动实现.wmv
005-zinxV0.1-开发服务器应用.wmv
006-zinxV0.2-链接模块的封装(方法与属性).wmv
007-zinxV0.2-链接模块的方法实现.wmv
008-zinxV0.2-server 与 connection 的集成.wmv
009-zinxV0.3-Request 请求消息的封装定义.wmv
010-zinxV0.3-Router 模块的定义.wmv
011-zinxV0.3-框架集成 router 模块.wmv
012-zinxV0.3-开发服务器应用.wmv
013-zinxV0.4-添加全局配置模块思路及目标.wmv
014-zinxV0.4-实现全局配置模块.wmv
015-zinxV0.4-全局参数的硬代码替换.wmv
016-ZinxV0.4-开发服务器应用.wmv
017-zinxV0.5-Message 消息模块定义实现.wmv
018-zinxV0.5-TCP 粘包问题的解决思路.wmv
019-zinxV0.5-封包拆包过程实现.wmv
020-zinxV0.5-封包拆包模块的单元测试.wmv
021-ZinxV0.5-Zinx 框架集成消息封装机制.wmv
022-ZinxV0.5-使用 Zinx 框架开发-server 端实现.wmv
023-ZinxV0.5-使用 Zinx 框架开发-client 端实现.wmv
024-ZinxV0.6-消息管理模块思路分析.wmv
025-ZinxV0.6-消息管理模块的定义与实现.wmv
026-ZinxV0.6-集成消息管理模块思路.wmv
027-ZinxV0.6-集成消息管理模块实现.wmv
028-ZinxV0.6-使用 Zinx 框架开发.wmv
029-ZinxV0.7-读写分离模型思路分析.wmv
030-ZinxV0.7-读写分离模型实现.wmv
031-ZinxV0.7-使用 Zinx 框架开发.wmv
032-ZinxV0.8-开辟任务池限定业务 Gourtine 的意义及流程.wmv
033-ZinxV0.8-创建消息队列属性和全局配置 worker 工作池数量.wmv
034-ZinxV0.8-工作池的创建与 Worker 的流程实现.wmv
035-ZinxV0.8-发送消息队列机制方法实现.wmv
036-ZinxV0.8-消息队列及工作池机制继承 Zinx 到框架.wmv
037-ZinxV0.8-使用 zinx 框架开发.wmv
038-ZinxV0.9-连接管理模块目标分析.wmv
039-ZinxV0.9-连接管理器的定义实现.wmv
040-ZinxV0.9-连接管理器与 Server 模块关联.wmv
041-ZinxV0.9-连接管理器与 Connection 模块关联.wmv
042-ZinxV0.9-链接管理模块的功能测试.wmv
043-ZinxV0.9-链接的创建销毁的 Hook 方法顺序.wmv
044-ZinxV0.9-链接的创建-销毁 Hook 方法实现.wmv
045-ZinxV0.9-使用 Zinx 框架开发.wmv
046-ZinxV1.0-链接属性定义及实现.wmv
047-ZinxV1.0-使用 Zinx 框架开发.wmv
048-Zinx 服务器应用-MMO 游戏-整体结构介绍.wmv
049-Zinx 服务器应用-MMO 游戏-AOI 兴趣点的介绍.wmv
050-Zinx 服务器应用-MMO 游戏-AOI 格子的属性和方法分析.wmv
051-Zinx 服务器应用-MMO 游戏-AOI 格子类型的代码实现.wmv
052-Zinx 服务器应用-MMO 游戏-AOI 区域管理模块的属性和方法分析.wmv
053-Zinx 服务器应用-MMO 游戏-AOI 区域管理膜的初始化与打印方法实现.wmv
054-Zinx 服务器应用-MMO 游戏-AOI 区域管理模块初始化单元测试.wmv
055-Zinx 服务器应用-MMO 游戏-AOI 区域的一些计算方法.wmv
056-Zinx 服务器应用-MMO 游戏-根据格子 ID 得到九宫格格子信息.wmv
057-Zinx 服务器应用-MMO 游戏-九宫格信息获取单元测试.wmv
058-Zinx 服务器应用-MMO 游戏-通过坐标得到周边九宫格的全部玩家坐标集合.wmv
059-Zinx 服务器应用-MMO 游戏-AOI 管理模块的针对 Player 的添加删除查询实现.wmv
060-Zinx 服务器应用-MMO 游戏-protobuf 简介-与 json-xml 的对比.wmv
061-Zinx 服务器应用-MMO 游戏-protocol_buffer 的环境配置.wmv
062-Zinx 服务器应用-MMO 游戏-protocol_buffer 语法快速理解.wmv
063-Zinx 服务器应用-MMO 游戏-protobuf 的编译步骤.wmv
064-Zinx 服务器应用-MMO 游戏-protobuf 协议编程.wmv
065-Zinx 服务器应用-MMO 游戏-protobuf 协议编程流程总结.wmv
066-Zinx 服务器应用-MMO 游戏-游戏 proto3 协议介绍.wmv
067-Zinx 服务器应用-MMO 游戏-服务器项目构建.wmv
068-Zinx 服务器应用-MMO 游戏-玩家上线业务分析及步骤.wmv
069-Zinx 服务器应用-MMO 游戏-玩家上线 proto 协议生成.wmv
070-Zinx 服务器应用-MMO 游戏-玩家 Player 模块定义.wmv
071-Zinx 服务器应用-MMO 游戏-玩家上线功能测试与 Zinx 框架 bug 修复.wmv
072-Zinx 服务器应用-MMO 游戏-上线业务的实现.wmv
073-Zinx 服务器应用-MMO 游戏-世界聊天 proto 协议生成.wmv
074-Zinx 服务器应用-MMO 游戏-世界管理模块属性方法分析.wmv
075-Zinx 服务器应用-MMO 游戏-世界管理模块实现.wmv
076-Zinx 服务器应用-MMO 游戏-玩家上线添加到世界管理模块.wmv
077-Zinx 服务器应用-MMO 游戏-世界聊天了路由业务注册和业务实现.wmv
078-Zinx 服务器应用-MMO 游戏-玩家的广播聊天方法实现.wmv
079-Zinx 服务器应用-MMO 游戏-世界聊天测试.wmv
080-Zinx 服务器应用-MMO 游戏-同步上线玩家位置广播思路分析.wmv
081-Zinx 服务器应用-MMO 游戏-让周围玩家显示当前玩家.wmv
082-Zinx 服务器应用-MMO 游戏-测试周围玩家显示自己.wmv
083-Zinx 服务器应用-MMO 游戏-实现当前玩家显示周边玩家位置信息.wmv
084-Zinx 服务器应用-MMO 游戏-测试当前玩家显示周围玩家位置信息.wmv
085-Zinx 服务器应用-MMO 游戏-玩家移动过程实现.wmv
086-Zinx 服务器应用-MMO 游戏-玩家移动信息的广播实现.wmv
087-Zinx 服务器应用-MMO 游戏-玩家移动广播测试.wmv
089-Zinx 服务器应用-MMO 游戏-玩家下线业务分析.wmv
090-Zinx 服务器应用-MMO 游戏-玩家下线业务的实现.wmv
091-Zinx 服务器应用-MMO 游戏-玩家下线业务的测试.wmv
092-Zinx 服务器课程总结.wmv
![zinx 详细教程]( https://img.shields.io/badge/zinx 详细教程-简书-red.svg)
Zinx 是一个基于 Golang 的轻量级并发服务器框架
我们为什么要做 Zinx,Golang 目前在服务器的应用框架很多,但是应用在游戏领域或者其他长链接的领域的轻量级企业框架甚少。
设计 Zinx 的目的是我们可以通过 Zinx 框架来了解基于 Golang 编写一个 TCP 服务器的整体轮廓,让更多的 Golang 爱好者能深入浅出的去学习和认识这个领域。
Zinx 框架的项目制作采用编码和学习教程同步进行,将开发的全部递进和迭代思维带入教程中,而不是一下子给大家一个非常完整的框架去学习,让很多人一头雾水,不知道该如何学起。
教程会一个版本一个版本迭代,每个版本的添加功能都是微小的,让一个服务框架小白,循序渐进的曲线方式了解服务器框架的领域。
当然,最后希望 Zinx 会有更多的人加入,给我们提出宝贵的意见,让 Zinx 成为真正的解决企业的服务器框架!在此感谢您的关注!
《 Zinx 框架教程-基于 Golang 的轻量级并发服务器》
基于 Zinx 框架开发的服务器应用,主函数步骤比较精简,最多主需要 3 步即可。
func main() {
//1 创建一个 server 句柄
s := znet.NewServer()
//2 配置路由
s.AddRouter(0, &PingRouter{})
//3 开启服务
s.Serve()
}
其中自定义路由及业务配置方式如下:
import (
"fmt"
"zinx/ziface"
"zinx/znet"
)
//ping test 自定义路由
type PingRouter struct {
znet.BaseRouter
}
//Ping Handle
func (this *PingRouter) Handle(request ziface.IRequest) {
//先读取客户端的数据
fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData()))
//再回写 ping...ping...ping
err := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping"))
if err != nil {
fmt.Println(err)
}
}
Zinx 的消息处理采用,[MsgLength]|[MsgID]|[Data]
的封包格式
package main
import (
"fmt"
"io"
"net"
"time"
"zinx/znet"
)
/*
模拟客户端
*/
func main() {
fmt.Println("Client Test ... start")
//3 秒之后发起测试请求,给服务端开启服务的机会
time.Sleep(3 * time.Second)
conn,err := net.Dial("tcp", "127.0.0.1:7777")
if err != nil {
fmt.Println("client start err, exit!")
return
}
for n := 3; n >= 0; n-- {
//发封包 message 消息
dp := znet.NewDataPack()
msg, _ := dp.Pack(znet.NewMsgPackage(0,[]byte("Zinx Client Test Message")))
_, err := conn.Write(msg)
if err !=nil {
fmt.Println("write error err ", err)
return
}
//先读出流中的 head 部分
headData := make([]byte, dp.GetHeadLen())
_, err = io.ReadFull(conn, headData) //ReadFull 会把 msg 填充满为止
if err != nil {
fmt.Println("read head error")
break
}
//将 headData 字节流 拆包到 msg 中
msgHead, err := dp.Unpack(headData)
if err != nil {
fmt.Println("server unpack err:", err)
return
}
if msgHead.GetDataLen() > 0 {
//msg 是有 data 数据的,需要再次读取 data 数据
msg := msgHead.(*znet.Message)
msg.Data = make([]byte, msg.GetDataLen())
//根据 dataLen 从 io 中读取字节流
_, err := io.ReadFull(conn, msg.Data)
if err != nil {
fmt.Println("server unpack data err:", err)
return
}
fmt.Println("==> Recv Msg: ID=", msg.Id, ", len=", msg.DataLen, ", data=", string(msg.Data))
}
time.Sleep(1*time.Second)
}
}
{
"Name":"zinx v-0.10 demoApp",
"Host":"127.0.0.1",
"TcpPort":7777,
"MaxConn":3,
"WorkerPoolSize":10,
"LogDir": "./mylog",
"LogFile":"zinx.log"
}
Name
:服务器应用名称
Host
:服务器 IP
TcpPort
:服务器监听端口
MaxConn
:允许的客户端链接最大数量
WorkerPoolSize
:工作任务池最大工作 Goroutine 数量
LogDir
: 日志文件夹
LogFile
: 日志文件名称(如果不提供,则日志信息打印到 Stderr)
func NewServer () ziface.IServer
创建一个 Zinx 服务器句柄,该句柄作为当前服务器应用程序的主枢纽,包括如下功能:
func (s *Server) Start()
func (s *Server) Stop()
func (s *Server) Serve()
func (s *Server) AddRouter (msgId uint32, router ziface.IRouter)
func (s *Server) SetOnConnStart(hookFunc func (ziface.IConnection))
func (s *Server) SetOnConnStop(hookFunc func (ziface.IConnection))
//实现 router 时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写
type BaseRouter struct {}
//这里之所以 BaseRouter 的方法都为空,
// 是因为有的 Router 不希望有 PreHandle 或 PostHandle
// 所以 Router 全部继承 BaseRouter 的好处是,不需要实现 PreHandle 和 PostHandle 也可以实例化
func (br *BaseRouter)PreHandle(req ziface.IRequest){}
func (br *BaseRouter)Handle(req ziface.IRequest){}
func (br *BaseRouter)PostHandle(req ziface.IRequest){}
func (c *Connection) GetTCPConnection() *net.TCPConn
func (c *Connection) GetConnID() uint32
func (c *Connection) RemoteAddr() net.Addr
func (c *Connection) SendMsg(msgId uint32, data []byte) error
func (c *Connection) SendBuffMsg(msgId uint32, data []byte) error
//设置链接属性
func (c *Connection) SetProperty(key string, value interface{})
//获取链接属性
func (c *Connection) GetProperty(key string) (interface{}, error)
//移除链接属性
func (c *Connection) RemoveProperty(key string)
作者:Aceld(刘丹冰)
简书号:IT 无崖子
mail
:
[email protected]
github
:
https://github.com/aceld
原创书籍 gitbook
:
http://legacy.gitbook.com/@aceld
QQ 技术讨论群: 135991862
评论里留下邮箱[担心爬虫,可以用 base64 加密],每天晚上 /早上我争取把视频发过去 -_-! (希望有妹子哈~~)。
301
muchengxue 2019-06-03 17:33:52 +08:00
NzEwNzE1OTg5QHFxLmNvbQ== 感谢分享
|
302
karlkor 2019-06-03 17:35:54 +08:00
a2FybGtvcjZAcXEuY29tCg==
感谢分享 |
303
ys 2019-06-03 17:35:57 +08:00
感谢分享
eWlwcGVldHJ5QGdtYWlsLmNvbQ== |
304
h16051010 2019-06-03 17:36:22 +08:00
邮箱:Y3h6ZHNhMTQ3NzQxQGdtYWlsLmNvbQ==
感谢楼主分享! |
305
TheBigRain 2019-06-03 17:44:12 +08:00
NDYwNDM4ODUwQHFxLmNvbQ==
谢谢楼主分享 |
306
tangwz 2019-06-03 17:45:22 +08:00
Z3p0YW5nd2VpemhpQDE2My5jb20K
感谢分享 |
307
lixin147741 2019-06-03 17:45:29 +08:00
NjA1ODg1ODkyQHFxLmNvbQ==
感谢分享 |
308
carlclone 2019-06-03 17:47:43 +08:00
OTA2NTYxOTc0QHFxLmNvbQ==
感谢分享 |
309
junyuuuu 2019-06-03 17:49:15 +08:00
anVueXV1dXVAZm94bWFpbC5jb20=
感谢分享 |
310
Mark24 2019-06-03 17:49:18 +08:00
bWFyay56aGFuZ3lvdW5nQHFxLmNvbQ==
感谢楼主 |
311
tubaflute 2019-06-03 17:50:16 +08:00
NTU0NjI0MzcxQHFxLmNvbQ==
特别特别感谢能分享 |
312
li27962278 2019-06-03 17:50:49 +08:00
bGkyMjc5NjIyNzhAdmlwLnFxLmNvbQ==
我伪装成妹子 |
313
mangomickey 2019-06-03 17:54:49 +08:00
YW5pYW42NzY5QGdtYWlsLmNvbQ==
感谢分享 |
314
5yyy 2019-06-03 17:56:03 +08:00
d3V5YW41eUBob3RtYWlsLmNvbQ==
感谢分享 |
315
ThomasZ 2019-06-03 17:56:41 +08:00 via Android
已收到,感谢分享
|
316
hahahasnoopy 2019-06-03 17:56:46 +08:00
MjQzODgwNTE4OEBxcS5jb20=
感谢楼主♥ |
317
nosay 2019-06-03 17:59:12 +08:00
bm9zYXl4QGdtYWlsLmNvbQ==
感谢分享 |
318
coolooks 2019-06-03 18:00:05 +08:00
Y29vbG9vemhhbmdAZm94bWFpbC5jb20=
感谢分享 |
319
Sayhey5 2019-06-03 18:02:42 +08:00 via iPhone
ZnJhbmszNDUyOTVAZ21haWwuY29t
感谢楼主分享! |
320
set01 2019-06-03 18:02:52 +08:00
ZGVhbjU5NUBxcS5jb20=
|
321
arseBurger 2019-06-03 18:03:19 +08:00
bWV4aWNlckBvdXRsb29rLmNvbQ==
感谢分享 |
322
tongdongdong 2019-06-03 18:04:25 +08:00
Nzg2MDg4OTJAcXEuY29t
感谢分享 |
323
MikeFeng 2019-06-03 18:15:07 +08:00
cWlubGFuZmVuZ0Bmb3htYWlsLmNvbQ==
感谢分享 |
324
taocwang 2019-06-03 18:15:23 +08:00
ZXRhb0BxcS5jb20=
感谢分享 |
325
dawnxu 2019-06-03 18:16:16 +08:00
ODcyNDA5QGdtYWlsLmNvbQ==
感谢分享♥ |
326
xiangri 2019-06-03 18:18:07 +08:00
NDU1MTc5MDcyQHFxLmNvbQ==
感谢分享 |
327
fay94 2019-06-03 18:18:53 +08:00
bGZobGlmZWdoYW9AZ21haWwuY29t
|
328
hw93 2019-06-03 18:20:21 +08:00
Njc2MDE4NjgzQHFxLmNvbQ==
❤️ |
329
followyourheart 2019-06-03 18:20:43 +08:00
MTE2NDM0MjM3MUBxcS5jb20=
凑个热闹 |
330
youngxhui 2019-06-03 18:21:44 +08:00 via Android
eW91bmd4aHVpQDE2My5jb20= 谢谢楼主
|
331
Latin 2019-06-03 18:24:36 +08:00
MzUzNDU2NjA0QHFxLmNvbQ==
感谢分享 |
332
lhx2008 2019-06-03 18:24:43 +08:00
eGVudkBxcS5jb20=
凑下热闹 |
333
xsir 2019-06-03 18:35:19 +08:00
eHNpcjk5QGdtYWlsLmNvbQ==
凑下热闹 |
334
zhhlwd 2019-06-03 18:38:17 +08:00
emhobHdkQHFxLmNvbQ==
感谢分享 |
335
haon 2019-06-03 18:38:36 +08:00
MjM3MTMxNTA0QHFxLmNvbQ==
感谢分享 |
336
chengcanmm77 2019-06-03 18:43:27 +08:00
YnVja2V0Y2hlbmdAMTIzLmNvbQ==
感谢分享 |
337
zcwlwen 2019-06-03 18:44:04 +08:00
emN3X2x3ZW5Ac2luYS5jbg==
感谢 |
338
cyy564 2019-06-03 18:58:44 +08:00
已 star,感谢分享
Y3l5X2RmaEAxNjMuY29t |
339
nnikooih 2019-06-03 18:59:45 +08:00
a2lubmNoYXBpQGFsaXl1bi5jb20= (base64),感谢。
|
340
serical 2019-06-03 19:07:28 +08:00
c2VyaWNhbEB5YW5kZXguY29tCg==
感谢分享 |
341
lozzow 2019-06-03 19:12:14 +08:00
d3V5b3VnZXRAZ21haWwuY29t
感谢楼主 |
342
ylsopkok 2019-06-03 19:12:42 +08:00
MTU4NDE4MzVAcXEuY29t
感谢分享 |
343
tuimaochang 2019-06-03 19:14:08 +08:00
ODUxNDQxNjg2QHFxLmNvbQ==
谢谢楼主分享好人一生平安 |
344
yutou527 2019-06-03 19:19:17 +08:00
NjQyMTE0NjQ1QHFxLmNvbQ==
感谢分享 我是妹子 |
345
yzure 2019-06-03 19:20:23 +08:00
aGl0d2hjeXpAMTYzLmNvbQ==
感谢分享 |
346
a282810 2019-06-03 19:21:13 +08:00
ODI0NDUxMzMzQHFxLmNvbQ==
感谢分享 |
347
WIN2333 2019-06-03 19:27:34 +08:00
MTM3NDg2MjYwNkBxcS5jb20=
感谢分享 |
348
diveandwatch 2019-06-03 19:36:17 +08:00 via iPad
bGthNTA3MjY5MkAxNjMuY29t 感谢分享,支持一下
|
349
coolloves 2019-06-03 19:38:12 +08:00
Y29vbGxvdmVzQDE2My5jb20K
感谢分享 |
350
hellotuzi 2019-06-03 19:42:57 +08:00
Y3hrc2xpbGluZ0AxNjMuY29t
感谢分享 |
351
akiyamamio 2019-06-03 19:45:31 +08:00
c2FiZXJtaW9AMTI2LmNvbQ==
|
352
akiyamamio 2019-06-03 19:45:56 +08:00
@akiyamamio 感谢分享
|
353
ihuzhou 2019-06-03 19:48:43 +08:00
ODcxNzkyNDEyQHFxLmNvbQ==
|
354
ihuzhou 2019-06-03 19:49:05 +08:00
ODcxNzkyNDEyQHFxLmNvbQ==
靴靴大佬 |
355
cxshun 2019-06-03 19:49:07 +08:00
Y3hzaHVuQGdtYWlsLmNvbQ==
感谢分享 |
356
ben0629 2019-06-03 19:59:46 +08:00
MzQ4Njg0MjAyQHFxLmNvbQ==
感谢分享 |
357
OakScript 2019-06-03 20:00:20 +08:00
d2hlbmhvdzk0QHFxLmNvbQ== 谢谢分享
|
358
zhuzhibin 2019-06-03 20:04:19 +08:00
谢谢老哥分享 : )
Ymluemhpemh1QGdtYWlsLmNvbQ== |
359
Imr 2019-06-03 20:04:48 +08:00 via iPhone
NjkxMzY1MUBxcS5jb20
充满期待 |
360
javaist 2019-06-03 20:05:55 +08:00
YW50aXJlekAxNjMuY29t
感谢分享 |
361
40huo 2019-06-03 20:06:28 +08:00
YXBwQDQwaHVvLmNu 感谢分享
|
362
danson1895 2019-06-03 20:10:10 +08:00
NjI0NjM4MjU0QHFxLmNvbQ==
感谢大佬分享 |
363
CoolkHz 2019-06-03 20:10:30 +08:00
Z29kZmFzdGlvbkBnbWFpbC5jb20=
感谢分享 |
364
scxieyong 2019-06-03 20:13:11 +08:00 via Android
|
365
ilovesusu 2019-06-03 20:13:56 +08:00
MHg3Mzc1NzM3NUBnbWFpbC5jb20=
|
366
1005gel 2019-06-03 20:17:44 +08:00
NzY2OTI0ODJAcXEuY29t
谢谢分享 |
367
XSG 2019-06-03 20:19:59 +08:00 via iPhone
|
368
devloperchen 2019-06-03 20:20:37 +08:00
NjMwMTYyOTY0QHFxLmNvbQ==
感谢分享,好人一身平安 |
369
heybuddy 2019-06-03 20:22:24 +08:00 via Android
多谢大佬
|
370
ytang 2019-06-03 20:30:12 +08:00
NDE0NTg1MzE2QHFxLmNvbQ== 谢谢
|
371
chigco 2019-06-03 20:40:01 +08:00 via iPhone
Y2hpZ2NvQHFxLmNvbQ==
感谢 |
372
ReGlenn 2019-06-03 20:45:50 +08:00
NDE1ODE3MzE3QHFxLmNvbQ==
感谢! 好人一生平安! |
373
kenLT 2019-06-03 20:54:15 +08:00
MTAyMDc2NDcyNUBxcS5jb20= 感谢! 好人一生平安!
|
374
ETCartman 2019-06-03 20:54:53 +08:00 via iPhone
bGl1aGFuanVuMzY5QGdtYWlsLmNvbQ==
谢谢谢谢谢 |
376
yyh325 2019-06-03 21:01:21 +08:00
MTE1ODc1ODI0MEBxcS5jb20=
|
377
monstervivi 2019-06-03 21:09:23 +08:00
感谢楼主分享!
|
378
monstervivi 2019-06-03 21:10:50 +08:00
NzcwMzQyNjQzQHFxLmNvbQ==
刚忘记带邮箱了 哈哈哈哈哈哈哈哈 感谢楼主分享! |
379
SharkU 2019-06-03 21:24:40 +08:00
Y3Bvcm9za2VAMTYzLmNvbQ==
感谢楼主 |
380
logonod 2019-06-03 21:26:23 +08:00
MjI3NTA0NTQ4MEBxcS5jb20=
感谢楼主分享!哈哈哈 |
381
gclove 2019-06-03 21:37:27 +08:00
Z2Nsb3ZlQGxpdmUuY29t
|
382
guanhui07 2019-06-03 22:00:16 +08:00
Z3Vhbmh1aTA3QGdtYWlsLmNvbQ==
|
383
susheng 2019-06-03 22:01:39 +08:00
bXliZXN0cGFydG5lckBzaW5hLmNvbQ==
感谢 |
384
orvnge 2019-06-03 22:05:07 +08:00
OTM5Njg1NjIzQHFxLmNvbQ==
感谢楼主 |
385
Reinhold 2019-06-03 22:10:45 +08:00
NDQ4NjI2ODU5QHFxLmNvbQ==
感谢楼主 |
386
lcgg 2019-06-03 22:14:23 +08:00
MzcwOTE1NzA3QHFxLmNvbQ==
感谢楼主分享 |
387
huson 2019-06-03 22:22:31 +08:00
YmlsYWl0QGZveG1haWwuY29t
感谢 感谢 非常感谢 |
388
dwyyy 2019-06-03 22:32:46 +08:00
NDcxMjQwMTg2QHFxLmNvbQ==
凑个热闹,感谢楼主 |
389
childelins 2019-06-03 22:41:56 +08:00 via Android
OTAzNDY0ODc4QHFxLmNvbQ==
感谢分享~ |
390
CSM 2019-06-03 22:47:31 +08:00
c2h1YWkubWluQHFxLmNvbQo=
凑个热闹 |
391
MacGyver 2019-06-03 22:58:26 +08:00
anBtaWtlQHFxLmNvbQ==
谢谢楼主分享 |
392
TanLian 2019-06-03 23:05:49 +08:00
MTc5OTkzODczOUBxcS5jb20=
|
393
TanLian 2019-06-03 23:06:12 +08:00
MTc5OTkzODczOUBxcS5jb20=
感谢楼主分享 |
394
yaoweilei 2019-06-03 23:07:36 +08:00
eWFvd2VpbGVpQGhvdG1haWwuY29t
感谢楼主分享 |
395
pacoyang 2019-06-03 23:07:38 +08:00
MTMwMzA0MDQzQHFxLmNvbQ==
感谢楼主分享 |
396
liubian 2019-06-03 23:08:15 +08:00 via Android
[email protected] 感谢大佬
|
397
fairyme 2019-06-03 23:13:24 +08:00 via iPhone
ZmFpcnltZWVlZUBnbWFpbC5jb20=
感谢分享 |
398
OhYee 2019-06-03 23:19:33 +08:00 via Android
邮箱:b3lvaHllZUBveW9oeWVlLmNvbQ==
已 star,感谢 |
399
MadbookPro 2019-06-03 23:25:51 +08:00
YW50aS5wZW5nQGdtYWlsLmNvbQ==
thx for sharing |
400
ToBeBetter 2019-06-03 23:29:48 +08:00 via iPhone
[email protected]
谢谢楼主分享 |