TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
- o3 D9 S3 A4 X3 s) y' j功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java( ?9 Z9 Y) B$ a0 P
" | |/ S( \' I4 _% i9 N- package services;
$ R6 I2 ~' m9 O7 W3 p
8 K: P. H; }& p, g3 ~( ?' `- import java.util.ArrayList;
* E; |* J# A) a - import java.util.Collection;8 ?) q% D" _2 x4 { U0 L* I: k- J! q
- import java.util.List;( w( B7 z( d9 _" [4 W2 ~5 m
4 k4 j+ C" D) c, w$ |+ M, X- import javax.servlet.http.HttpServletRequest;
+ ?. D2 V% |/ ^" C8 N - import javax.servlet.http.HttpSession;
! d+ l" O5 k* \! n5 c/ y
6 @ ^2 S% f$ }6 h- k- import org.directwebremoting.ScriptSession;
`+ f: N; } I: a - import org.directwebremoting.WebContext;; d: N0 Z( h9 b+ M4 c; Z
- import org.directwebremoting.WebContextFactory;& o: T9 E# z' [) T
- import org.directwebremoting.proxy.dwr.Util;% z1 \$ p" @# I9 i. n; C1 m1 `' c
0 n& u6 N9 k' N- n- import pojo.MessageInfo;2 g* w. I$ ^4 {
- import pojo.UserInfo;
7 ?& H) h; K! v* M- U ]; F% T - 3 I6 z: i6 q/ t8 s
- public class ChatManager {: M5 ?+ Z# _: q% Z
- public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();9 s8 f. u. C+ b" N$ f' u, e S
- public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();
) v1 |* Z4 z% U3 j6 y1 [/ c5 u - public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();4 \" S) x) T9 |! x$ Z
- public ChatManager(){+ J2 p9 h" x( {& U0 ]8 X, y
- UserInfo userInfo = new UserInfo("0","所有人");
2 H# q) m5 j) S) [1 V& S - sendUserList.add(userInfo); K4 W5 e! R# a4 x# s# |: M$ j
- }, p: m) C3 D6 \! j y: M$ j
- F9 a3 r9 ~& N1 R2 }5 l9 K
- public String updateOnlineUsers(String userName,boolean flag) {5 d H2 r+ N. ?0 I# W) ~4 @$ W/ ]
- UserInfo userInfo=null;6 f2 R* Z7 C* m
- WebContext context=WebContextFactory.get();
- }$ z- ]/ V! {( G% u1 z - HttpSession session = context.getSession();+ S' j3 |. r: I% `
- if (flag) {* a# g. L- R5 x0 B/ I( D/ }
- userInfo = new UserInfo(session.getId(),userName);
4 }2 B3 K# ]: s9 u" ]# O |) g - onlineUsersList.add(userInfo);6 ?; h! `- o( [# P8 C
- sendUserList.add(userInfo);
7 N9 t7 `8 j9 T" [ - this.setScriptSessionFlag(userInfo);
, x, F$ L& q& T& s - }/ y E$ j6 L/ v' ]$ s
- String currentPage = "/chat/index.jsp";
: \. \5 a* l8 t5 p0 f" G3 t* B - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
3 w9 h6 H( X& C R - Util allPageUtil = new Util(sessionsByPage);
, |$ K) @" Y7 F( i \ - allPageUtil.removeAllOptions("onlineList");$ e4 x/ q8 X; X6 o& X' R
- allPageUtil.addOptions("onlineList", onlineUsersList, "userName");2 U6 S1 S: w+ y) ]& w
- allPageUtil.removeAllOptions("userList");
9 d3 l$ e) }& C" P2 T$ D% V - allPageUtil.addOptions("userList", sendUserList, "userId", "userName");# o W; ^/ i- j5 ?* M( p! ]
- if (!flag) {
+ ^ t- T8 D' k - return null;. p/ E& z6 P( b; t7 T
- }
+ w! l( x; ~# e+ l# z - return userInfo.getUserId();
/ ^* n9 w8 q! v+ @' X. v+ D - } _5 p! j, z. d' i2 i @# V% Y8 p4 I
- , `/ I% a# h; L1 N! w0 F
- public void setScriptSessionFlag(UserInfo userInfo) {7 a0 S0 [& u# s1 e) U0 o2 u; w* u5 ^ i
- WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);' _, v+ h. z" B/ H8 x T
- }, Y9 k W7 H1 N# L% Q
- 9 Q9 K4 C( d% K
- public Collection<ScriptSession> getScriptSessionFlag(String userId) {7 ]2 E. x9 d. C$ M' A8 L
- Collection<ScriptSession> list=new ArrayList<ScriptSession>();
2 T7 A# Y- L% Q: H# o4 }+ C G" u9 x+ u - Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
4 R6 b) E# a$ d$ Z4 y8 {/ } - WebContext context = WebContextFactory.get();9 h. O% m" J& K& z) t
- String currentPage = "/chat/index.jsp";# E' ?3 D, ^+ X/ C6 F
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);/ \6 z+ V G: b+ n/ \/ I
- sessions.addAll(sessionsByPage);6 D1 ], K: Q* N9 T1 ~: e
- if ("0".equals(userId)) {
& B4 @, D0 k* G - list=sessions;
! H# }/ G6 X4 I! ~ - }else{+ [4 a1 j9 j, ~4 I' A
- for (ScriptSession session : sessions) {
, {( N0 o6 Z- j+ V: K - UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");
9 p- @! H. t. m0 Q" K8 r. K; A - if (userId.equals(userInfo.getUserId())) {
7 V$ r( G: }/ T6 w9 j* R: x - list.add(session);
9 c4 R* o7 ^) `% ]$ Q - break;6 c1 j3 d; R6 i6 o% k* @7 }9 q
- }8 \0 o& h8 I" k2 _
- }
) c( j. h. k$ t2 X% S/ I) |) A& A3 L - }' q( s% \* c' [5 x
- return list;
+ W( H" C3 s, K' l6 e/ Q- V6 A - }
; y" p2 y& h0 z5 Q -
" G! t$ I- ~, R9 R9 L/ w - public void sendMessage(String sender,String receiverId,String msg) {
% |0 ~+ m1 B& f. j - Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);) l& B) w& p7 l4 o. F
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);
1 e" v+ u" j( `. Y* C) h. Y$ D - messageList.add(messageInfo);
+ N' T- J t+ O6 ]" R+ T2 ^- ? - Util receiverUtil = new Util(scriptSessionFlag);
1 `; _) d; w6 Y - receiverUtil.removeAllOptions("messageList");
# I) Y3 }# H& X( M - receiverUtil.addOptions("messageList", messageList, "msg");! M5 D8 ]8 x* \/ t3 b& R8 B6 I
- }
2 y4 l4 `3 e2 u8 x" ^+ B4 ~ - }! ~" B$ K9 V. e! T$ M
复制代码
2 r0 p% ]# P: [" M0 C; f项目源码下载地址:点击下载+ S& A6 \) [7 C
$ X8 f" y7 F3 r" w$ O+ ^7 Z6 ^7 ` |
|