TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。 4 O! z: Z% e& Y9 u, _
功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java- P j! f8 w) D9 J7 z: |. V
8 V2 v5 M1 [3 b' A- package services;. u7 @7 a( a! y& U1 n- k
2 O1 j6 u( w" ^( {- import java.util.ArrayList;* p3 t$ v: H4 v4 a& O
- import java.util.Collection;, W) h( T4 r2 }6 B0 {2 C% L' P
- import java.util.List;
% n1 O! D( H+ W1 `! Y, E9 C
! ?& G& f# f4 x9 |1 I" y- import javax.servlet.http.HttpServletRequest;# r) M; h9 M+ h! s1 d i
- import javax.servlet.http.HttpSession;7 n* ^1 m- I. v" c4 V. j
- # I0 C& D& e, F. w6 ^" _
- import org.directwebremoting.ScriptSession;, a. |1 J7 t) Q3 _
- import org.directwebremoting.WebContext;
$ I4 b3 D9 h5 K6 n% Y - import org.directwebremoting.WebContextFactory;: t. O; F5 ?; D6 `" z
- import org.directwebremoting.proxy.dwr.Util;, m5 W, }8 o ^" o5 y: I
- ! s# c( Q8 Y4 c6 p
- import pojo.MessageInfo;2 Z* \9 \# m5 {7 R' ?3 F* x( [
- import pojo.UserInfo;
2 s$ T! `9 j6 z
3 P( ], K/ ]$ N5 ?- public class ChatManager {
8 r. Q' N* C1 }' E7 e9 `2 Q - public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();
* {. t% x* a$ \5 D& y - public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();1 [% p/ @& \' Z- C4 ^) k8 Q2 p
- public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();: Q+ T# N/ x: Q0 z7 y; y# U( F
- public ChatManager(){+ l5 Z, Z, v3 a4 n* `7 d E
- UserInfo userInfo = new UserInfo("0","所有人");
: R# K) T( J' j: c; r& q - sendUserList.add(userInfo);( [+ P! F1 U n9 t3 l$ h
- }
0 E% N, Y4 U7 ? c( p$ Y9 N -
, I& l. J& m) a" R4 U/ M: \ - public String updateOnlineUsers(String userName,boolean flag) {% E' N: v9 N; b2 C+ n8 M# }& u2 n
- UserInfo userInfo=null;* \% L; I; Z( Y
- WebContext context=WebContextFactory.get();
. H- S2 B& }7 ^( C8 F - HttpSession session = context.getSession();
5 X. c5 c0 S/ ~ - if (flag) {2 {! w6 C1 E; N5 B
- userInfo = new UserInfo(session.getId(),userName);- o: z% K( P( b# w! f5 U9 e
- onlineUsersList.add(userInfo);( F1 C. n% l" Q! c
- sendUserList.add(userInfo);: \5 K) C3 d- Y
- this.setScriptSessionFlag(userInfo);
( a1 B( n. Q4 B- ]. `& I - }
m. O0 ?9 N( Q. L# f+ r9 M - String currentPage = "/chat/index.jsp";
' P0 o0 P" m& z) V+ N0 l - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);, t! O9 A) g' o! |, ^" a$ j
- Util allPageUtil = new Util(sessionsByPage);6 o& O2 n3 q$ y k' @
- allPageUtil.removeAllOptions("onlineList");& R: _9 r) c# k( x# L
- allPageUtil.addOptions("onlineList", onlineUsersList, "userName");" c' u2 b/ R5 \6 V3 i
- allPageUtil.removeAllOptions("userList");- X) S' Q& \; `; Y3 ?% d$ @- b6 I
- allPageUtil.addOptions("userList", sendUserList, "userId", "userName");6 x; h D: v# {$ e- y
- if (!flag) {2 _& V7 u$ H# C5 y' {$ ^9 N0 E
- return null;* i+ C% ?" v7 o- i/ J
- }
2 _$ g. d; b- B' p - return userInfo.getUserId();; X5 t( L _6 s( x9 z" z
- }7 I, q% o0 ?, ^
- 4 O6 k) u7 e+ a/ d
- public void setScriptSessionFlag(UserInfo userInfo) {3 h% O! F4 G& r3 T3 n+ j
- WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);% B/ w! G- B e k2 Z
- }
5 |5 J3 F) r! [& b6 V$ x -
2 B6 `. ?3 X% v$ J4 a1 o8 u; h/ O l - public Collection<ScriptSession> getScriptSessionFlag(String userId) {
$ c `+ ]- `- c0 R3 K, W - Collection<ScriptSession> list=new ArrayList<ScriptSession>();4 K) {/ h/ I3 W
- Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
" ^* U* L: W' r0 O+ v - WebContext context = WebContextFactory.get();
+ g3 l: }1 v" w. I4 Y7 h1 i - String currentPage = "/chat/index.jsp";" ^: V. u) y2 Q0 p3 J. _
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
- d7 E- x+ ?, h! F2 K - sessions.addAll(sessionsByPage);
3 w+ f. x5 ~- g1 \ - if ("0".equals(userId)) {4 i5 M x% B9 s8 p* S" @! D
- list=sessions;$ l A' Z9 V0 t! w9 d2 [- Y" z
- }else{* f4 c% D2 Q4 q; x6 e7 \" \
- for (ScriptSession session : sessions) {
8 O& \6 ?- Q) |1 ~6 b - UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");
" L+ y8 I5 M/ Y3 j" Z5 \ - if (userId.equals(userInfo.getUserId())) {1 V2 V: D9 x' m6 U* O' B8 u
- list.add(session);& T6 Q% U; ^( T
- break;8 {' l* f9 _2 D* ]2 H4 a1 }
- }
8 f* M* V: m' T2 b/ D/ ~ - }
: g, Y1 r- Q3 ~8 G8 V! e - }
; T { D3 ?% Q; @ - return list;5 s- K% ^! z! I4 P# N7 _$ D9 ^
- }
. q# M& J7 o6 g3 Z; r, B - 6 U: q( [, j" w; w) A
- public void sendMessage(String sender,String receiverId,String msg) {6 e$ O& t5 s; @6 Z4 Q
- Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);; C. ?0 n/ d& J# X( h
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);
3 S! J( v' z6 m9 E, n - messageList.add(messageInfo);
) o# E) `8 U- G# L; W6 _9 L& ] - Util receiverUtil = new Util(scriptSessionFlag);
7 ~! }6 o8 \0 L( k1 ^ - receiverUtil.removeAllOptions("messageList");5 R. @ z! s: C8 z; P
- receiverUtil.addOptions("messageList", messageList, "msg");
; }( w `2 ~3 G3 m - }
o& S2 }% |6 I& v6 x6 d - }2 p* Z/ \2 N, z Y+ q
复制代码 6 N" ?: T7 D. D( k
项目源码下载地址:点击下载; B" M% Q" z3 u. p/ h6 R7 }$ ` E
) q( h' z; j3 J9 ]+ S9 e: S
|
|