Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GreyZeng
hello-netty
提交
205a03f1
H
hello-netty
项目概览
GreyZeng
/
hello-netty
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hello-netty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
205a03f1
编写于
9月 19, 2022
作者:
GreyZeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
28998eaf
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
165 addition
and
68 deletion
+165
-68
src/main/java/chat/client/LoginResponseHandler.java
src/main/java/chat/client/LoginResponseHandler.java
+38
-0
src/main/java/chat/client/MessageResponseHandler.java
src/main/java/chat/client/MessageResponseHandler.java
+19
-0
src/main/java/chat/client/NettyClient.java
src/main/java/chat/client/NettyClient.java
+1
-3
src/main/java/chat/protocol/LoginRequestHandler.java
src/main/java/chat/protocol/LoginRequestHandler.java
+0
-12
src/main/java/chat/protocol/LoginResponseHandler.java
src/main/java/chat/protocol/LoginResponseHandler.java
+0
-12
src/main/java/chat/protocol/MessageRequestHandler.java
src/main/java/chat/protocol/MessageRequestHandler.java
+0
-12
src/main/java/chat/protocol/MessageResponseHandler.java
src/main/java/chat/protocol/MessageResponseHandler.java
+0
-12
src/main/java/chat/protocol/PacketCodeC.java
src/main/java/chat/protocol/PacketCodeC.java
+11
-9
src/main/java/chat/protocol/PacketDecoder.java
src/main/java/chat/protocol/PacketDecoder.java
+11
-3
src/main/java/chat/protocol/PacketEncoder.java
src/main/java/chat/protocol/PacketEncoder.java
+8
-3
src/main/java/chat/server/LoginRequestHandler.java
src/main/java/chat/server/LoginRequestHandler.java
+53
-0
src/main/java/chat/server/MessageRequestHandler.java
src/main/java/chat/server/MessageRequestHandler.java
+24
-0
src/main/java/chat/server/NettyServer.java
src/main/java/chat/server/NettyServer.java
+0
-2
未找到文件。
src/main/java/chat/client/LoginResponseHandler.java
0 → 100644
浏览文件 @
205a03f1
package
chat.client
;
import
chat.protocol.LoginRequestPacket
;
import
chat.protocol.LoginResponsePacket
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.SimpleChannelInboundHandler
;
import
java.util.Date
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
LoginResponseHandler
extends
SimpleChannelInboundHandler
<
LoginRequestPacket
>
{
@Override
protected
void
channelRead0
(
ChannelHandlerContext
ctx
,
LoginRequestPacket
loginRequestPacket
)
{
System
.
out
.
println
(
new
Date
()
+
": 收到客户端登录请求……"
);
LoginResponsePacket
loginResponsePacket
=
new
LoginResponsePacket
();
loginResponsePacket
.
setVersion
(
loginRequestPacket
.
getVersion
());
if
(
valid
(
loginRequestPacket
))
{
loginResponsePacket
.
setSuccess
(
true
);
System
.
out
.
println
(
new
Date
()
+
": 登录成功!"
);
}
else
{
loginResponsePacket
.
setReason
(
"账号密码校验失败"
);
loginResponsePacket
.
setSuccess
(
false
);
System
.
out
.
println
(
new
Date
()
+
": 登录失败!"
);
}
// 登录响应
ctx
.
channel
().
writeAndFlush
(
loginResponsePacket
);
}
private
boolean
valid
(
LoginRequestPacket
loginRequestPacket
)
{
return
true
;
}
}
\ No newline at end of file
src/main/java/chat/client/MessageResponseHandler.java
0 → 100644
浏览文件 @
205a03f1
package
chat.client
;
import
chat.protocol.MessageResponsePacket
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.SimpleChannelInboundHandler
;
import
java.util.Date
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
MessageResponseHandler
extends
SimpleChannelInboundHandler
<
MessageResponsePacket
>
{
@Override
protected
void
channelRead0
(
ChannelHandlerContext
ctx
,
MessageResponsePacket
messageResponsePacket
)
{
System
.
out
.
println
(
new
Date
()
+
": 收到服务端的消息: "
+
messageResponsePacket
.
getMessage
());
}
}
\ No newline at end of file
src/main/java/chat/client/NettyClient.java
浏览文件 @
205a03f1
package
chat.client
;
import
chat.LoginUtil
;
import
chat.client.ClientHandler
;
import
chat.protocol.LoginResponseHandler
;
import
chat.protocol.MessageRequestPacket
;
import
chat.protocol.MessageResponseHandler
;
import
chat.protocol.PacketCodeC
;
import
chat.protocol.PacketDecoder
;
import
chat.protocol.PacketEncoder
;
import
io.netty.bootstrap.Bootstrap
;
import
io.netty.buffer.ByteBuf
;
import
io.netty.channel.Channel
;
...
...
src/main/java/chat/protocol/LoginRequestHandler.java
已删除
100644 → 0
浏览文件 @
28998eaf
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
LoginRequestHandler
implements
ChannelHandler
,
EventExecutorGroup
{
}
src/main/java/chat/protocol/LoginResponseHandler.java
已删除
100644 → 0
浏览文件 @
28998eaf
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
LoginResponseHandler
implements
ChannelHandler
,
EventExecutorGroup
{
}
src/main/java/chat/protocol/MessageRequestHandler.java
已删除
100644 → 0
浏览文件 @
28998eaf
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
MessageRequestHandler
implements
ChannelHandler
,
EventExecutorGroup
{
}
src/main/java/chat/protocol/MessageResponseHandler.java
已删除
100644 → 0
浏览文件 @
28998eaf
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
MessageResponseHandler
implements
ChannelHandler
,
EventExecutorGroup
{
}
src/main/java/chat/protocol/PacketCodeC.java
浏览文件 @
205a03f1
...
...
@@ -34,6 +34,17 @@ public class PacketCodeC {
serializerMap
.
put
(
serializer
.
getSerializerAlogrithm
(),
serializer
);
}
public
void
encode
(
ByteBuf
byteBuf
,
Packet
packet
)
{
// 2. 序列化 java 对象
byte
[]
bytes
=
Serializer
.
DEFAULT
.
serialize
(
packet
);
// 3. 实际编码过程
byteBuf
.
writeInt
(
MAGIC_NUMBER
);
byteBuf
.
writeByte
(
packet
.
getVersion
());
byteBuf
.
writeByte
(
Serializer
.
DEFAULT
.
getSerializerAlogrithm
());
byteBuf
.
writeByte
(
packet
.
getCommand
());
byteBuf
.
writeInt
(
bytes
.
length
);
byteBuf
.
writeBytes
(
bytes
);
}
public
ByteBuf
encode
(
ByteBufAllocator
byteBufAllocator
,
Packet
packet
)
{
// 1. 创建 ByteBuf 对象
...
...
@@ -54,25 +65,18 @@ public class PacketCodeC {
public
Packet
decode
(
ByteBuf
byteBuf
)
{
// 跳过 magic number
byteBuf
.
skipBytes
(
4
);
// 跳过版本号
byteBuf
.
skipBytes
(
1
);
// 序列化算法
byte
serializeAlgorithm
=
byteBuf
.
readByte
();
// 指令
byte
command
=
byteBuf
.
readByte
();
// 数据包长度
int
length
=
byteBuf
.
readInt
();
byte
[]
bytes
=
new
byte
[
length
];
byteBuf
.
readBytes
(
bytes
);
Class
<?
extends
Packet
>
requestType
=
getRequestType
(
command
);
Serializer
serializer
=
getSerializer
(
serializeAlgorithm
);
if
(
requestType
!=
null
&&
serializer
!=
null
)
{
return
serializer
.
deserialize
(
requestType
,
bytes
);
}
...
...
@@ -81,12 +85,10 @@ public class PacketCodeC {
}
private
Serializer
getSerializer
(
byte
serializeAlgorithm
)
{
return
serializerMap
.
get
(
serializeAlgorithm
);
}
private
Class
<?
extends
Packet
>
getRequestType
(
byte
command
)
{
return
packetTypeMap
.
get
(
command
);
}
}
src/main/java/chat/protocol/PacketDecoder.java
浏览文件 @
205a03f1
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
import
io.netty.buffer.ByteBuf
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.handler.codec.ByteToMessageDecoder
;
import
java.util.List
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
PacketDecoder
implements
ChannelHandler
,
EventExecutorGroup
{
public
class
PacketDecoder
extends
ByteToMessageDecoder
{
@Override
protected
void
decode
(
ChannelHandlerContext
ctx
,
ByteBuf
in
,
List
<
Object
>
out
)
{
out
.
add
(
PacketCodeC
.
INSTANCE
.
decode
(
in
));
}
}
src/main/java/chat/protocol/PacketEncoder.java
浏览文件 @
205a03f1
package
chat.protocol
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.util.concurrent.EventExecutorGroup
;
import
io.netty.buffer.ByteBuf
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.handler.codec.MessageToByteEncoder
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
PacketEncoder
implements
ChannelHandler
,
EventExecutorGroup
{
public
class
PacketEncoder
extends
MessageToByteEncoder
<
Packet
>
{
@Override
protected
void
encode
(
ChannelHandlerContext
ctx
,
Packet
msg
,
ByteBuf
out
)
throws
Exception
{
PacketCodeC
.
INSTANCE
.
encode
(
out
,
msg
);
}
}
src/main/java/chat/server/LoginRequestHandler.java
0 → 100644
浏览文件 @
205a03f1
package
chat.server
;
import
chat.LoginUtil
;
import
chat.protocol.LoginRequestPacket
;
import
chat.protocol.LoginResponsePacket
;
import
chat.protocol.MessageResponsePacket
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.SimpleChannelInboundHandler
;
import
java.util.Date
;
import
java.util.UUID
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
LoginRequestHandler
extends
SimpleChannelInboundHandler
<
LoginResponsePacket
>
{
@Override
public
void
channelActive
(
ChannelHandlerContext
ctx
)
{
// 创建登录对象
LoginRequestPacket
loginRequestPacket
=
new
LoginRequestPacket
();
loginRequestPacket
.
setUserId
(
UUID
.
randomUUID
().
toString
());
loginRequestPacket
.
setUsername
(
"flash"
);
loginRequestPacket
.
setPassword
(
"pwd"
);
// 写数据
ctx
.
channel
().
writeAndFlush
(
loginRequestPacket
);
}
@Override
protected
void
channelRead0
(
ChannelHandlerContext
ctx
,
LoginResponsePacket
loginResponsePacket
)
{
if
(
loginResponsePacket
.
isSuccess
())
{
System
.
out
.
println
(
new
Date
()
+
": 客户端登录成功"
);
LoginUtil
.
markAsLogin
(
ctx
.
channel
());
}
else
{
System
.
out
.
println
(
new
Date
()
+
": 客户端登录失败,原因:"
+
loginResponsePacket
.
getReason
());
}
}
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
}
\ No newline at end of file
src/main/java/chat/server/MessageRequestHandler.java
0 → 100644
浏览文件 @
205a03f1
package
chat.server
;
import
chat.protocol.MessageRequestPacket
;
import
chat.protocol.MessageResponsePacket
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.SimpleChannelInboundHandler
;
import
java.util.Date
;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/9/12
* @since
*/
public
class
MessageRequestHandler
extends
SimpleChannelInboundHandler
<
MessageRequestPacket
>
{
@Override
protected
void
channelRead0
(
ChannelHandlerContext
ctx
,
MessageRequestPacket
msg
)
{
MessageResponsePacket
messageResponsePacket
=
new
MessageResponsePacket
();
System
.
out
.
println
(
new
Date
()
+
": 收到客户端消息: "
+
msg
.
getMessage
());
messageResponsePacket
.
setMessage
(
"服务端回复【"
+
msg
.
getMessage
()
+
"】"
);
ctx
.
channel
().
writeAndFlush
(
messageResponsePacket
);
}
}
src/main/java/chat/server/NettyServer.java
浏览文件 @
205a03f1
package
chat.server
;
import
chat.protocol.LoginRequestHandler
;
import
chat.protocol.MessageRequestHandler
;
import
chat.protocol.PacketDecoder
;
import
chat.protocol.PacketEncoder
;
import
io.netty.bootstrap.ServerBootstrap
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录