Repository navigation
Expand file tree
/
Copy pathConnection.java
More file actions
134 lines (104 loc) · 3.12 KB
/
Copy pathConnection.java
File metadata and controls
134 lines (104 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.modulecode.net.impl;
import com.modulecode.net.*;
import lombok.Getter;
import lombok.Setter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
public class Connection implements IConnection {
private static final Logger logger = LogManager.getLogger(Connection.class);
Socket conn;
int connid;
boolean isClosed;
//告诉当前连接已经退出/停止
boolean exitChan;
IMsgHandle msgHandle;
@Getter
@Setter
IDataPack dataPack;
//当前服务器的消息管理模块
@Override
public void start() {
logger.info("one player join in connid= {}", connid);
//启动当前连接的读数据业务
new Thread(() -> {
try {
startReader();
} catch (IOException e) {
System.out.println(e);
logger.error(e.getMessage());
}
}).start();
}
private void startReader() throws IOException {
//循环读取
//读取一个int的长度
DataInputStream dataInputStream = new DataInputStream(conn.getInputStream());
for (; ; ) {
if (dataInputStream.available() > 0) {
//如果这个包不存在 就创建
if (this.dataPack == null) {
this.dataPack = new DataPack();
}
//从路由,找到绑定的对应 router
IDataPack dataPack = this.dataPack;
IMessage iMessage = dataPack.unPack(dataInputStream);
Request request = new Request(this, iMessage);
//执行注册的路由方法
msgHandle.doMsgHandler(request);
}
}
}
@Override
public void stop() throws IOException {
logger.info("Conn stop().. connid= {}", connid);
//如果连接已经关闭
if (isClosed) {
return;
}
isClosed = true;
//关闭socket连接
conn.close();
}
@Override
public Socket getTCPSocket() {
return conn;
}
@Override
public int getConnID() {
return connid;
}
@Override
public InetAddress remoteAddr() {
return conn.getInetAddress();
}
@Override
public void sendMsg(int msgid, byte[] data) {
try {
byte[] binaryMsg = dataPack.pack(new Message(msgid, data.length, data));
conn.getOutputStream().write(binaryMsg);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void setProperty(String key, Object value) {
}
@Override
public Object getProperty(String key) {
return null;
}
@Override
public void removeProperty(String key) {
}
public Connection(Socket conn, int connid, IMsgHandle msgHandle) {
this.conn = conn;
this.connid = connid;
this.msgHandle = msgHandle;
this.isClosed = false;
this.exitChan = false;
}
}