forked from yezhihao/jt808-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
剑器近
authored and
Yezhihao
committed
Apr 8, 2019
1 parent
b4b53fb
commit 2050b67
Showing
17 changed files
with
398 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package org.yzh.framework.log; | ||
|
||
import org.slf4j.LoggerFactory; | ||
import org.yzh.framework.TCPServerHandler; | ||
import org.yzh.framework.message.PackageData; | ||
import org.yzh.framework.session.Session; | ||
|
||
public class Logger { | ||
|
||
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TCPServerHandler.class.getSimpleName()); | ||
|
||
public String logMessage(String type, PackageData packageData, String message) { | ||
String log = type + " " + message; | ||
logger.info(log); | ||
return log; | ||
} | ||
|
||
public String logEvent(String event, Session session) { | ||
String log = event + " " + session.getTerminalId(); | ||
logger.info(log); | ||
return log; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package org.yzh.web.component; | ||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Component; | ||
import org.yzh.framework.log.Logger; | ||
import org.yzh.framework.message.PackageData; | ||
|
||
@Component | ||
public class WebLogger extends Logger { | ||
|
||
@Autowired | ||
WebSocketMessageHandler webSocketMessageHandler; | ||
|
||
public String logMessage(String type, PackageData packageData, String message) { | ||
String log = super.logMessage(type, packageData, message); | ||
webSocketMessageHandler.broadcast(log); | ||
return log; | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
src/main/java/org/yzh/web/component/WebSocketInterceptor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package org.yzh.web.component; | ||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.http.server.ServerHttpRequest; | ||
import org.springframework.http.server.ServerHttpResponse; | ||
import org.springframework.http.server.ServletServerHttpRequest; | ||
import org.springframework.web.socket.WebSocketHandler; | ||
import org.springframework.web.socket.server.HandshakeInterceptor; | ||
import org.yzh.web.config.SessionKey; | ||
|
||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpSession; | ||
import java.util.Map; | ||
|
||
public class WebSocketInterceptor implements HandshakeInterceptor { | ||
|
||
@Autowired | ||
private WebSocketMessageHandler webSocketMessageHandler; | ||
|
||
@Override | ||
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) { | ||
if (request instanceof ServletServerHttpRequest) { | ||
HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); | ||
HttpSession session = servletRequest.getSession(); | ||
Integer id = (Integer) session.getAttribute(SessionKey.USER_ID); | ||
if (id != null) { | ||
webSocketMessageHandler.closeSession(id); | ||
attributes.put(SessionKey.USER_ID, id); | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
@Override | ||
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
src/main/java/org/yzh/web/component/WebSocketMessageHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package org.yzh.web.component; | ||
|
||
import org.springframework.web.socket.CloseStatus; | ||
import org.springframework.web.socket.TextMessage; | ||
import org.springframework.web.socket.WebSocketSession; | ||
import org.springframework.web.socket.handler.TextWebSocketHandler; | ||
import org.yzh.web.config.SessionKey; | ||
|
||
import java.io.IOException; | ||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
public class WebSocketMessageHandler extends TextWebSocketHandler { | ||
|
||
private static final Map<Integer, WebSocketSession> webSocketMap = new ConcurrentHashMap(); | ||
|
||
public void closeSession(Integer id) { | ||
WebSocketSession socketSession = webSocketMap.get(id); | ||
if (socketSession != null) { | ||
try { | ||
socketSession.close(); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* 消息广播 | ||
*/ | ||
public void broadcast(String message) { | ||
for (WebSocketSession socketSession : webSocketMap.values()) { | ||
send(socketSession, message); | ||
} | ||
} | ||
|
||
public void send(WebSocketSession socketSession, String message) { | ||
try { | ||
socketSession.sendMessage(new TextMessage(message)); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
|
||
@Override | ||
public void afterConnectionEstablished(WebSocketSession session) { | ||
Integer id = (Integer) session.getAttributes().get(SessionKey.USER_ID); | ||
webSocketMap.put(id, session); | ||
} | ||
|
||
@Override | ||
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { | ||
if (message.getPayloadLength() < 1) | ||
return; | ||
for (WebSocketSession socketSession : webSocketMap.values()) | ||
socketSession.sendMessage(message); | ||
} | ||
|
||
@Override | ||
public void handleTransportError(WebSocketSession session, Throwable error) { | ||
error.printStackTrace(); | ||
} | ||
|
||
@Override | ||
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { | ||
Integer id = (Integer) session.getAttributes().get(SessionKey.USER_ID); | ||
webSocketMap.remove(id); | ||
} | ||
|
||
@Override | ||
public boolean supportsPartialMessages() { | ||
return false; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package org.yzh.web.config; | ||
|
||
public interface SessionKey { | ||
|
||
String USER = "user"; | ||
String USER_ID = "userId"; | ||
|
||
} |
Oops, something went wrong.