TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。 / H! K, t. o" V* S0 U+ x
功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java
3 B2 K/ w% _; t( q
`8 a0 K+ g" k/ o( V) W- package services;
0 p) \+ [: V2 u, A3 s0 M
2 N; u$ K8 L3 Y% s X0 `1 g4 o- import java.util.ArrayList;
) o# A- D. B* W9 f& z' d - import java.util.Collection;
+ P; c, T- @7 C$ @ - import java.util.List;
& y9 O: ?4 o! A
+ O% @. G1 ?5 ~- f) |/ I0 i- import javax.servlet.http.HttpServletRequest;
; _) a( v# [0 }3 e4 Y/ Z - import javax.servlet.http.HttpSession;
! ^" ~, a/ N c$ b/ g - 0 r! `9 e* T3 L. b: I! r# M# ?$ Y2 j
- import org.directwebremoting.ScriptSession;1 X1 G+ r& | v: f' f! H, A
- import org.directwebremoting.WebContext;4 R5 }. y2 K/ J ~/ k* i# A1 G! Q( N
- import org.directwebremoting.WebContextFactory;/ b/ h4 [* l" r% F" c9 e0 B. M
- import org.directwebremoting.proxy.dwr.Util;
& o* V9 ]9 ?& d0 \# A! D' V& N" `+ ? - 9 O% \2 o1 x/ i }+ C- M. v/ d
- import pojo.MessageInfo;0 D3 B( {0 D% Q% N$ }: @; ?0 Y
- import pojo.UserInfo;
" [, j6 ^9 S. I/ b |1 h
" h& Y2 J Q; z4 @9 B6 ^4 _- X- public class ChatManager {
5 p8 t3 T j' j* x0 x - public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();( e5 b9 G; I2 \7 X4 w5 S
- public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();
& r2 U& m+ h- l# V3 Z! o0 g$ P - public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
. P& U) R( F4 x$ }6 m, B7 U - public ChatManager(){
1 L/ ?0 @. C) p2 n - UserInfo userInfo = new UserInfo("0","所有人");
& @1 Z9 s; M. l - sendUserList.add(userInfo);6 s2 \" s8 W# G
- }+ _. g- Z4 I4 M. P0 v- [
-
2 G+ J, t3 r- u4 H }; u8 r, ~ F - public String updateOnlineUsers(String userName,boolean flag) {" A( {" P. w. S
- UserInfo userInfo=null;7 B+ T3 a& s/ L& O- S
- WebContext context=WebContextFactory.get();
1 X- F6 N; l/ W( X/ L+ m: W - HttpSession session = context.getSession();0 |' [! r# r2 E; i; K q( v( `
- if (flag) {" h+ h. f% `- S8 q. L3 z/ R, b1 Z! `
- userInfo = new UserInfo(session.getId(),userName);* n& @6 ~, ], B- J2 m6 }# r9 ~
- onlineUsersList.add(userInfo);4 L* o. N/ u& z# e
- sendUserList.add(userInfo);
7 F- @3 ~: E: f$ [0 v2 o - this.setScriptSessionFlag(userInfo);7 n* k# P) i+ n* t1 U
- }1 _ L& S9 T) m, S s# c# ^7 }
- String currentPage = "/chat/index.jsp";& X- A. A# a5 S( g# Z" h
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
% ~( ^0 D# x( ` - Util allPageUtil = new Util(sessionsByPage);
9 r5 \) K* ] V4 h1 H# Y3 Y% X - allPageUtil.removeAllOptions("onlineList");8 v1 J. G3 U1 C, z
- allPageUtil.addOptions("onlineList", onlineUsersList, "userName");
: h, k! c" |2 @3 F. Z - allPageUtil.removeAllOptions("userList");2 c4 ]$ f5 z, l& q( g$ D
- allPageUtil.addOptions("userList", sendUserList, "userId", "userName");
4 p% e2 N) L D4 s& @8 J2 X* C - if (!flag) {. u5 W% J: a d& [( K0 j$ I
- return null;
2 n, ~9 o0 d$ b7 l) n4 E - }
" f: h9 v3 b' m, p' I/ s3 F - return userInfo.getUserId();
, v- l; g1 a2 m/ @8 H, M - }
* x7 K5 G& e' f: |* q8 h' K. _% d - ) R* O3 o2 @! E, J; s
- public void setScriptSessionFlag(UserInfo userInfo) {
2 M- ? T/ @: b8 t- q - WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);
) t6 |0 I. F4 h - }
3 g% l3 E5 H/ K; F- e - 5 Y+ J( B. e8 x {
- public Collection<ScriptSession> getScriptSessionFlag(String userId) {
2 A# ~6 _ g* D( |' f6 N+ @+ }3 G - Collection<ScriptSession> list=new ArrayList<ScriptSession>();
& }/ \' b6 H" v" N' y. H9 n - Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
, l) O. c9 K# }# I* U# C/ H - WebContext context = WebContextFactory.get();
& `7 @# V( w" F8 w( O - String currentPage = "/chat/index.jsp";
) p9 |7 C8 i, Q A, J" }$ i# r' S - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
) M# e% k- l( X- R4 z9 w3 j8 l - sessions.addAll(sessionsByPage); j2 D2 G7 z2 j. @" W. ^ A. F# T% J
- if ("0".equals(userId)) {
9 B% ^. B" O/ ]* o- ` - list=sessions;" Y, G8 G9 L5 k8 x
- }else{1 ~1 u: w/ W) ]+ I1 w
- for (ScriptSession session : sessions) {7 C0 l8 d! ?/ C6 m+ u) ]
- UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");
, ?2 l. B: I* k/ w0 f4 l - if (userId.equals(userInfo.getUserId())) {
% ?4 e; g/ x( a7 M3 E2 C - list.add(session);4 z4 q4 q$ Y' F
- break;& T+ k0 M- f/ Y
- }: }# ]- P( C) w' C! F# u+ W+ B
- }
( r) L. D+ n; p6 M- \5 f - }
/ l, y4 u- E1 ^: G - return list;
' f& \- s( [9 `" F* A - }7 C) y% \ u( n3 y7 I
- ( X- T" K* X# ?; y- g/ e! }4 y% c
- public void sendMessage(String sender,String receiverId,String msg) {/ m }5 g* V$ w& @& q
- Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);
- Q% D; n$ O% [ q4 `2 W: Q4 e - MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);
; i& g+ B: }, s5 p; ~ - messageList.add(messageInfo);; C) E |8 S5 m; [& \" D
- Util receiverUtil = new Util(scriptSessionFlag);! d8 S+ ^2 m$ {4 P. N) t! i" X3 z+ ^
- receiverUtil.removeAllOptions("messageList");
& R- i7 H6 l" }3 L7 d3 K - receiverUtil.addOptions("messageList", messageList, "msg");
( S9 }9 h+ Y) m4 {0 b) [, P' E - }% R! {1 x, \2 P, E" X
- }( \5 _- E4 t+ c
复制代码 6 m( U: T% ?. L% T
项目源码下载地址:点击下载
$ E7 {) I, O8 h+ Z U, m% ?$ @# L# ]2 D# X# w0 {
|
|