TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
) Y% h/ k4 Z5 F5 q, Y" n$ t+ ?功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java+ D3 S9 j# G8 p4 ]! T
M8 C+ k0 m {. H
- package services;0 i8 o0 D/ W; h5 B" k' H# c
- : V; e# E! Z6 Z2 Q
- import java.util.ArrayList;
3 y9 N w' i6 y8 u% A - import java.util.Collection;
9 F% M$ r( o' J" m- k. O& m8 @ - import java.util.List;
" y: P4 E6 @8 p& v
3 C; E* T+ U+ z# V- import javax.servlet.http.HttpServletRequest;
, N) T) n+ O9 I% D* r- e" H8 G. ? - import javax.servlet.http.HttpSession;
& m$ D9 U/ q0 I$ M2 N$ W
7 C+ ^4 g! r/ { t0 @- import org.directwebremoting.ScriptSession;# q( q7 \8 M. K, Z9 F
- import org.directwebremoting.WebContext;
0 b& ]; y, E& |% G5 x# t - import org.directwebremoting.WebContextFactory;% Y' e1 B& v7 T9 ?8 D- h
- import org.directwebremoting.proxy.dwr.Util;
7 i$ Q8 Q v J ^$ K4 t, O* G `4 u
9 ^. H0 v: m$ P/ \- v z, q4 h- import pojo.MessageInfo;( F: O( q3 ^4 e' ^& W
- import pojo.UserInfo;
& I7 H+ N: |0 d, Z+ a# o9 H$ u
) i5 o( ]# F' h0 x3 m- public class ChatManager {
5 M: |" s1 d; ] - public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();
# U( }$ A# y8 ~# W! G! o: h - public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();
( a% C) O* }$ G% M6 Y; N* N8 T - public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
; X$ E9 s7 [# q! E - public ChatManager(){; M' _( G1 q7 i# V- r
- UserInfo userInfo = new UserInfo("0","所有人");6 B7 N- r! i9 d
- sendUserList.add(userInfo);
$ u: p( ]$ _4 A% f# l0 A8 E: ^! L - }
8 i; t& H, J5 m6 p% N: L -
7 t- ?5 a0 _& s2 R8 b6 d5 F6 z - public String updateOnlineUsers(String userName,boolean flag) {
) ~$ c% h; w0 h2 W; p, j) K - UserInfo userInfo=null;
# B: ]8 ?0 q, ?) j: ]- F% P+ K8 K - WebContext context=WebContextFactory.get();
2 \) E3 u8 N7 d+ w" i - HttpSession session = context.getSession();
( u/ N+ f/ j( U - if (flag) {3 L7 W/ }1 B4 N# _+ X' m
- userInfo = new UserInfo(session.getId(),userName);
# w) z2 H+ ~) Y( x' ^$ T; I - onlineUsersList.add(userInfo);+ @4 s3 S _4 Q% Q5 m2 R( f$ Q* Z3 G
- sendUserList.add(userInfo);
5 ^3 W6 {2 d+ f8 K0 k% t' L - this.setScriptSessionFlag(userInfo);) A- N& D6 k1 \" L( I4 ^6 I! }
- }- N. N' @: D4 F" o2 a
- String currentPage = "/chat/index.jsp";7 o' D+ T2 U, w6 Z$ H/ c6 j
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);" M' b) q. g5 Y: r+ Q
- Util allPageUtil = new Util(sessionsByPage);; h, Z. F" {4 V% }& E7 C
- allPageUtil.removeAllOptions("onlineList");
. U9 e6 [+ Z# O/ x- X - allPageUtil.addOptions("onlineList", onlineUsersList, "userName");1 |- u; l& R) W" R4 H7 J; _
- allPageUtil.removeAllOptions("userList");
5 D+ q7 d8 Y5 u7 H - allPageUtil.addOptions("userList", sendUserList, "userId", "userName");
% G# m" J+ c1 H" t - if (!flag) {
7 Y8 {) G- b" G0 _9 r - return null;
" R+ G: p* _+ c0 t, n& W# `& U - }
5 I3 s# g- T3 r& K t" E1 g( R - return userInfo.getUserId(); b: t' D/ i) }4 L
- }
4 L4 b0 j% S) ^* C7 H4 x# O - H3 }' |, n; \" b, U0 F
- public void setScriptSessionFlag(UserInfo userInfo) {
# J$ u( I1 Y7 ^* }0 f' g - WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);' S* C! F T) Y/ x* h
- }
; R* ]" X4 @8 H0 _7 L; d/ W -
% B" p) m( [ \ - public Collection<ScriptSession> getScriptSessionFlag(String userId) {
e0 m- i$ j) X) i+ u - Collection<ScriptSession> list=new ArrayList<ScriptSession>();
5 W8 ?& Z; m8 x) ` - Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
4 D% z6 g+ s) m. s2 d - WebContext context = WebContextFactory.get();
' h ]+ ^' s2 S* |( o; { - String currentPage = "/chat/index.jsp";( F; c5 G& I v$ Y& h5 ]% H
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);! }" m [' h$ }' k+ _
- sessions.addAll(sessionsByPage);
, G) x; @1 I/ |4 D - if ("0".equals(userId)) {
. f; j2 Z& y6 d! n& P" F# _9 H& O - list=sessions;* w2 Y; i4 R$ e; Y6 J
- }else{
, k6 ]7 i; k( V4 P k - for (ScriptSession session : sessions) {
& G4 u8 d6 |5 J/ }8 [4 ~- d6 R - UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");* b" p: j+ K. C7 y( V: }
- if (userId.equals(userInfo.getUserId())) {& w) Q) E9 k( \" m: m3 X, H: N
- list.add(session);
: B0 Z4 ~$ |$ }9 u/ ]' | - break;; K' d, S3 s8 W9 j7 @5 ~' Q4 R0 w+ e) W
- }; f4 r$ ~0 } i9 F
- }
3 V) v) N5 ~: n/ h - }" I( n, Y/ S9 u# K w, o( J
- return list;
& Z6 n( G; Y- U, [2 z - }
( s$ ^, O9 J Y8 o' E) h - 2 A) z2 x" A4 K) }" t9 {2 A* p9 |
- public void sendMessage(String sender,String receiverId,String msg) {+ d* n0 Y) \ ?# n; {, A
- Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);8 `6 w Y' k) D; T7 r, V" t! T5 F
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);5 C/ o' u. h5 E/ ^9 H
- messageList.add(messageInfo);
' l- o& {* t7 W - Util receiverUtil = new Util(scriptSessionFlag);
9 u! I6 l2 d; R' K; |) _/ d - receiverUtil.removeAllOptions("messageList");- D' y2 Y! d O! d
- receiverUtil.addOptions("messageList", messageList, "msg");( u! W5 R0 L" W7 g- c
- }
: s6 \2 w- x: J2 p7 Y) a - }& r2 v l- Z% m
复制代码 : s9 T) a5 ~/ ^9 Q8 R
项目源码下载地址:点击下载
: N8 \6 @1 q* b6 g. p/ h' D3 z: ]! t/ I. j& m
|
|