Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 63b992a

Browse filesBrowse files
committed
客户端互相通信
1 parent f2f9a9a commit 63b992a
Copy full SHA for 63b992a
Expand file treeCollapse file tree

17 files changed

+248
-136
lines changed
Open diff view settings
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/NettyClient.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/NettyClient.java
+31-10Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.bruis.learnnetty.im.client;
22

3-
import com.bruis.learnnetty.im.client.handler.FirstClientHandler;
43
import com.bruis.learnnetty.im.client.handler.LoginResponseHandler;
54
import com.bruis.learnnetty.im.client.handler.MessageResponseHandler;
65
import com.bruis.learnnetty.im.codec.PacketDecoder;
76
import com.bruis.learnnetty.im.codec.PacketEncoder;
87
import com.bruis.learnnetty.im.codec.Spliter;
8+
import com.bruis.learnnetty.im.model.LoginRequestPacket;
99
import com.bruis.learnnetty.im.model.MessageRequestPacket;
10-
import com.bruis.learnnetty.im.util.LoginUtil;
10+
import com.bruis.learnnetty.im.util.SessionUtil;
1111
import io.netty.bootstrap.Bootstrap;
1212
import io.netty.channel.Channel;
1313
import io.netty.channel.ChannelFuture;
@@ -45,13 +45,15 @@ public static void main(String[] args) {
4545
.handler(new ChannelInitializer<SocketChannel>() {
4646
@Override
4747
public void initChannel(SocketChannel ch) {
48+
// 拆包粘包处理
4849
ch.pipeline().addLast(new Spliter());
49-
// ch.pipeline().addLast(new FirstClientHandler());
50-
// 解码
50+
// 编码
5151
ch.pipeline().addLast(new PacketDecoder());
52+
// 登录响应
5253
ch.pipeline().addLast(new LoginResponseHandler());
54+
// 消息返回
5355
ch.pipeline().addLast(new MessageResponseHandler());
54-
// 编码
56+
// 解码
5557
ch.pipeline().addLast(new PacketEncoder());
5658
}
5759
});
@@ -80,16 +82,35 @@ private static void connect(Bootstrap bootstrap, String host, int port, int retr
8082
}
8183

8284
private static void startConsoleThread(Channel channel) {
85+
Scanner sc = new Scanner(System.in);
86+
LoginRequestPacket loginRequestPacket = new LoginRequestPacket();
87+
8388
new Thread(() -> {
8489
while (!Thread.interrupted()) {
85-
if (LoginUtil.hasLogin(channel)) {
86-
System.out.println("输入消息发送至服务端: ");
87-
Scanner sc = new Scanner(System.in);
88-
String line = sc.nextLine();
90+
if (!SessionUtil.hasLogin(channel)) {
91+
System.out.print("输入用户名登录: ");
92+
String username = sc.nextLine();
93+
loginRequestPacket.setUserName(username);
94+
95+
// 密码使用默认的
96+
loginRequestPacket.setPassword("pwd");
8997

90-
channel.writeAndFlush(new MessageRequestPacket(line));
98+
// 发送登录数据包
99+
channel.writeAndFlush(loginRequestPacket);
100+
waitForLoginResponse();
101+
} else {
102+
String toUserId = sc.next();
103+
String message = sc.next();
104+
channel.writeAndFlush(new MessageRequestPacket(toUserId, message));
91105
}
92106
}
93107
}).start();
94108
}
109+
110+
private static void waitForLoginResponse() {
111+
try {
112+
Thread.sleep(1000);
113+
} catch (InterruptedException ignored) {
114+
}
115+
}
95116
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/handler/FirstClientHandler.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/handler/FirstClientHandler.java
-35Lines changed: 0 additions & 35 deletions
This file was deleted.
Collapse file
+11-16Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.bruis.learnnetty.im.client.handler;
22

3-
import com.bruis.learnnetty.im.model.LoginRequestPacket;
43
import com.bruis.learnnetty.im.model.LoginResponsePacket;
5-
import com.bruis.learnnetty.im.util.LoginUtil;
4+
import com.bruis.learnnetty.im.session.Session;
5+
import com.bruis.learnnetty.im.util.SessionUtil;
66
import io.netty.channel.ChannelHandlerContext;
77
import io.netty.channel.SimpleChannelInboundHandler;
88

99
import java.util.Date;
10-
import java.util.UUID;
1110

1211
/**
1312
* @Description 登录响应的reponse
@@ -17,24 +16,20 @@
1716
public class LoginResponseHandler extends SimpleChannelInboundHandler<LoginResponsePacket> {
1817

1918
@Override
20-
public void channelActive(ChannelHandlerContext ctx) throws Exception {
21-
// 创建登录对象
22-
LoginRequestPacket loginRequestPacket = new LoginRequestPacket();
23-
loginRequestPacket.setUserId(UUID.randomUUID().toString());
24-
loginRequestPacket.setUserName("flash");
25-
loginRequestPacket.setPassword("pwd");
19+
protected void channelRead0(ChannelHandlerContext ctx, LoginResponsePacket loginResponsePacket) throws Exception {
20+
String userId = loginResponsePacket.getUserId();
21+
String userName = loginResponsePacket.getUserName();
2622

27-
// 写数据-发起登录
28-
ctx.channel().writeAndFlush(loginRequestPacket);
29-
}
30-
31-
@Override
32-
protected void channelRead0(ChannelHandlerContext channelHandlerContext, LoginResponsePacket loginResponsePacket) throws Exception {
3323
if (loginResponsePacket.isSuccess()) {
3424
System.out.println(new Date() + ": 客户端登录成功");
35-
LoginUtil.markAsLogin(channelHandlerContext.channel());
25+
SessionUtil.bindSession(new Session(userId, userName), ctx.channel());
3626
} else {
3727
System.out.println(new Date() + ": 客户端登录失败,原因:" + loginResponsePacket.getReason());
3828
}
3929
}
30+
31+
@Override
32+
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
33+
System.out.println("客户端连接被关闭");
34+
}
4035
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/handler/MessageResponseHandler.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/client/handler/MessageResponseHandler.java
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import io.netty.channel.ChannelHandlerContext;
55
import io.netty.channel.SimpleChannelInboundHandler;
66

7-
import java.util.Date;
8-
97
/**
108
* @Description
119
* @Author luohaiyang
@@ -14,6 +12,8 @@
1412
public class MessageResponseHandler extends SimpleChannelInboundHandler<MessageResponsePacket> {
1513
@Override
1614
protected void channelRead0(ChannelHandlerContext channelHandlerContext, MessageResponsePacket messageResponsePacket) throws Exception {
17-
System.out.println(new Date() + ": 收到服务端的消息: " + messageResponsePacket.getMessage());
15+
String fromUserId = messageResponsePacket.getFromUserId();
16+
String fromUserName = messageResponsePacket.getFromUserName();
17+
System.out.println(fromUserId + ":" + fromUserName + " -> " + messageResponsePacket.getMessage());
1818
}
1919
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/codec/Spliter.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/codec/Spliter.java
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
77

88
/**
9-
* @Description
9+
* @Description 拆包、粘包处理
1010
* @Author luohaiyang
1111
* @Date 2022/3/23
1212
*/
@@ -20,11 +20,11 @@ public Spliter() {
2020

2121
@Override
2222
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
23+
// 校验协议
2324
if (in.getInt(in.readerIndex()) != PacketCodeC.MAGIC_NUMBER) {
2425
ctx.channel().close();
2526
return null;
2627
}
27-
2828
return super.decode(ctx, in);
2929
}
3030
}
Collapse file
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bruis.learnnetty.im.model;
22

3+
import com.bruis.learnnetty.im.session.Session;
34
import io.netty.util.AttributeKey;
45

56
/**
@@ -8,5 +9,5 @@
89
* @Date 2022/3/22
910
*/
1011
public interface Attributes {
11-
AttributeKey<Boolean> LOGIN = AttributeKey.newInstance("login");
12+
AttributeKey<Session> SESSION = AttributeKey.newInstance("session");
1213
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/LoginResponsePacket.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/LoginResponsePacket.java
+21Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
* @Date 2022/3/22
99
*/
1010
public class LoginResponsePacket extends Packet {
11+
12+
private String userId;
13+
14+
private String userName;
15+
1116
private boolean success;
1217

1318
private String reason;
@@ -33,4 +38,20 @@ public String getReason() {
3338
public void setReason(String reason) {
3439
this.reason = reason;
3540
}
41+
42+
public String getUserId() {
43+
return userId;
44+
}
45+
46+
public void setUserId(String userId) {
47+
this.userId = userId;
48+
}
49+
50+
public String getUserName() {
51+
return userName;
52+
}
53+
54+
public void setUserName(String userName) {
55+
this.userName = userName;
56+
}
3657
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/MessageRequestPacket.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/MessageRequestPacket.java
+14-3Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@
99
*/
1010
public class MessageRequestPacket extends Packet {
1111

12+
private String toUserId;
13+
14+
private String message;
15+
1216
public MessageRequestPacket(){}
1317

14-
public MessageRequestPacket(String message) {
18+
public MessageRequestPacket(String toUserId, String message) {
19+
this.toUserId = toUserId;
1520
this.message = message;
1621
}
1722

18-
private String message;
19-
2023
@Override
2124
public Byte getCommand() {
2225
return MESSAGE_REQUEST;
@@ -29,4 +32,12 @@ public String getMessage() {
2932
public void setMessage(String message) {
3033
this.message = message;
3134
}
35+
36+
public String getToUserId() {
37+
return toUserId;
38+
}
39+
40+
public void setToUserId(String toUserId) {
41+
this.toUserId = toUserId;
42+
}
3243
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/MessageResponsePacket.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/model/MessageResponsePacket.java
+20Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
*/
1010
public class MessageResponsePacket extends Packet {
1111

12+
private String fromUserId;
13+
14+
private String fromUserName;
15+
1216
private String message;
1317

1418
@Override
@@ -24,4 +28,20 @@ public String getMessage() {
2428
public void setMessage(String message) {
2529
this.message = message;
2630
}
31+
32+
public String getFromUserId() {
33+
return fromUserId;
34+
}
35+
36+
public void setFromUserId(String fromUserId) {
37+
this.fromUserId = fromUserId;
38+
}
39+
40+
public String getFromUserName() {
41+
return fromUserName;
42+
}
43+
44+
public void setFromUserName(String fromUserName) {
45+
this.fromUserName = fromUserName;
46+
}
2747
}
Collapse file

‎Spring-Netty/src/main/java/com/bruis/learnnetty/im/server/NettyServer.java‎

Copy file name to clipboardExpand all lines: Spring-Netty/src/main/java/com/bruis/learnnetty/im/server/NettyServer.java
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.bruis.learnnetty.im.codec.PacketDecoder;
44
import com.bruis.learnnetty.im.codec.PacketEncoder;
55
import com.bruis.learnnetty.im.codec.Spliter;
6-
import com.bruis.learnnetty.im.server.handler.FirstServerHandler;
6+
import com.bruis.learnnetty.im.server.handler.AuthHandler;
77
import com.bruis.learnnetty.im.server.handler.LoginRequestHandler;
88
import com.bruis.learnnetty.im.server.handler.MessageRequestHandler;
99
import io.netty.bootstrap.ServerBootstrap;
@@ -41,6 +41,7 @@ protected void initChannel(NioSocketChannel ch) throws Exception {
4141
// ch.pipeline().addLast(new FirstServerHandler());
4242
ch.pipeline().addLast(new PacketDecoder());
4343
ch.pipeline().addLast(new LoginRequestHandler());
44+
ch.pipeline().addLast(new AuthHandler());
4445
ch.pipeline().addLast(new MessageRequestHandler());
4546
ch.pipeline().addLast(new PacketEncoder());
4647
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.