TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
2 D6 x( F) {; p功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java
4 j# E( V8 ~( Z2 ^0 {5 h
7 A" T" [- K$ \) f3 h6 ~; h- package services;) S7 }9 |3 A( R
- b7 H; Z: k) K4 ^& r( y" S- import java.util.ArrayList;
0 Z3 c8 `% h6 f) _/ o' q1 ` - import java.util.Collection;8 Q# ^& N& W4 S1 j5 G! X5 ?
- import java.util.List;% g3 k$ J$ u! U* b- X. q: E
- 2 W4 }2 R# q$ R* [7 v, j
- import javax.servlet.http.HttpServletRequest;! Y8 G1 I1 ^' I2 U* w$ @/ `
- import javax.servlet.http.HttpSession;4 B# S. N/ x0 u% b% S
5 u& ]' V6 I* |: U, z- import org.directwebremoting.ScriptSession;- _% h/ C& Z+ V9 E- w0 l, |) A
- import org.directwebremoting.WebContext;% Z. `6 f6 f. a* T3 ?6 F5 t
- import org.directwebremoting.WebContextFactory;9 v8 Z+ R! Y% v+ \, Y' X" [
- import org.directwebremoting.proxy.dwr.Util;' \, e# N8 ~' x! m/ r5 J/ t6 k% Z
- - A, L$ N, t" N7 F, U& m/ _& H
- import pojo.MessageInfo;) J% I2 P7 ?, K0 ]# T" l t. V! ]
- import pojo.UserInfo;
, B/ {. a+ n5 L# I
( V3 s3 z: r& w8 Y3 S c- public class ChatManager {' c7 d2 T6 X0 w. c4 G: k. j9 a
- public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();, p, c/ o+ |* I' O. B
- public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();
' Y+ s) x, B# x5 B$ E# v - public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
- m, z; {8 P5 i4 G/ o* k - public ChatManager(){
5 ^) I# r$ @' [% h7 d7 O - UserInfo userInfo = new UserInfo("0","所有人"); A! s8 I2 B' C% v$ D( L9 s G
- sendUserList.add(userInfo);# `' f6 [5 L' I( R7 a* a
- }, w. b( m- ~$ ~7 ~5 _/ y
-
7 E- ]- x& X9 m - public String updateOnlineUsers(String userName,boolean flag) {
1 @4 Y* ], m) X9 V( M; C - UserInfo userInfo=null;
! \( ~' y# P' c4 W* ^+ n# G - WebContext context=WebContextFactory.get();; K0 `5 ^4 \( [/ M3 K( B
- HttpSession session = context.getSession();
, B4 {3 }2 y. C/ X/ B+ j0 a- p# W - if (flag) {1 q0 H' R* `7 o! h
- userInfo = new UserInfo(session.getId(),userName);1 j+ L. |6 Y2 h8 M& r# I: C
- onlineUsersList.add(userInfo);1 s, b( d# r/ ^- T
- sendUserList.add(userInfo);
- h% ? Q! S1 o6 n - this.setScriptSessionFlag(userInfo);' S D, Q" B& L' }
- }
( h. w5 u* v* A! E: G3 k+ O - String currentPage = "/chat/index.jsp";
6 p; E/ v, ~, p6 }8 N/ k - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
: { H% [- y ]% J0 d) q( V - Util allPageUtil = new Util(sessionsByPage);
2 I/ l- @5 S: X, i8 a - allPageUtil.removeAllOptions("onlineList");
, [1 L3 {: m6 I9 p* ?& V2 G& X - allPageUtil.addOptions("onlineList", onlineUsersList, "userName");' n2 h" c% F( C" t1 f
- allPageUtil.removeAllOptions("userList");
& l0 W) G+ v) N0 e+ a# a( c - allPageUtil.addOptions("userList", sendUserList, "userId", "userName");
6 R4 n9 x8 l v1 w7 R3 y - if (!flag) {
; {# E/ Q5 j; |$ r - return null;3 l* b1 @* ^9 z) T0 W8 ]
- }$ @+ m# Z$ E6 E+ h! I5 j
- return userInfo.getUserId();
4 D7 X" r0 G5 x - }* l. _& s4 ~( @
- 0 B) Q) x* i3 A1 U" n
- public void setScriptSessionFlag(UserInfo userInfo) {% z$ @+ ~% o+ _: `- V# f" T% l
- WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);% ~9 q( j# V/ C! J' D" L
- }
+ G5 Z. ~3 e; k I& C$ h -
+ J5 y/ W! I* Z' Z+ q) z - public Collection<ScriptSession> getScriptSessionFlag(String userId) {, s- ^" f0 H* F% e3 H
- Collection<ScriptSession> list=new ArrayList<ScriptSession>();. s) w- I$ G0 v9 P( ?1 a- G
- Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
' h: U# M$ t6 h+ ` - WebContext context = WebContextFactory.get();, K. U9 f1 ^2 `; \( C
- String currentPage = "/chat/index.jsp";
& a& |/ G. q0 i1 t2 L/ ]8 Y! \2 o - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
. f% w6 _0 N; E! N& E4 F: I - sessions.addAll(sessionsByPage);: F/ z2 A: z$ g
- if ("0".equals(userId)) {- l- l. q$ G; Z# p% v
- list=sessions;( A$ y; r) k6 f1 x
- }else{1 P; k6 c% p p5 d0 s
- for (ScriptSession session : sessions) {. m+ A$ M1 S, j, _9 w8 S, c3 q
- UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");5 x6 J5 o2 e" g& q/ C s
- if (userId.equals(userInfo.getUserId())) {
7 |$ M) [1 ? \ - list.add(session);# t: q' C! \6 Q4 c( ^% `! t# M
- break;
& ]5 ^) ?7 l. c) I - }+ _0 k% ?6 L- C/ q
- }
$ A4 ]5 a- ?# @, Z1 Y - }
; W4 E$ X& J" p @1 m) { - return list;
4 L. f8 N, {5 X- f1 n/ V - }
0 ^3 ~1 n4 r+ [+ f -
' q' q5 J( c. H" |* ] - public void sendMessage(String sender,String receiverId,String msg) {& p3 t9 R1 S# L
- Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);& n3 [; n3 [" G) a' l, U
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);1 P$ z6 W5 }. X7 q+ I
- messageList.add(messageInfo);) ] h/ d% y+ P$ v
- Util receiverUtil = new Util(scriptSessionFlag);5 }" P/ Q# a( K
- receiverUtil.removeAllOptions("messageList");
. I! L$ w5 v, v) S7 T T x - receiverUtil.addOptions("messageList", messageList, "msg");
7 y8 K1 i- A# h& n% z - }+ ~7 o. `% Q) y% o8 M) T
- }
6 Q9 H @" W0 L M2 ^, A
复制代码 " N$ @. _; o$ G5 j: d6 o
项目源码下载地址:点击下载
- b+ S, T4 d! }( Z# F( l8 R8 f
|
|