TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
6 S/ J" Q& c: X3 b7 ~' z功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java3 ]. C5 }+ k2 s- D" n& L8 ~+ F
, P, H+ R/ `( J9 m8 w, n, R- package services;
0 [3 O4 O2 v7 l. r( N - 6 L( q% D' D8 V0 h+ y
- import java.util.ArrayList;
0 M# L% O. e, W% A6 U - import java.util.Collection;! S( W7 `3 N; ]: v) Z. F
- import java.util.List;
; t' Z6 I0 {& W - 3 V3 _* B- }' b6 c3 m0 C
- import javax.servlet.http.HttpServletRequest;
+ M4 M$ s `! {; _5 |" m - import javax.servlet.http.HttpSession;: f9 ^% P' ~% _& U5 _
, O% \$ X: f8 p% J( }- ]- import org.directwebremoting.ScriptSession;
' Z$ G+ b) [4 e* S( X - import org.directwebremoting.WebContext;
" N' D! m2 \7 W3 @ - import org.directwebremoting.WebContextFactory;3 C- W8 ^: o6 R' }3 b
- import org.directwebremoting.proxy.dwr.Util;
/ N( u* ^5 D X4 j; F( i( F7 P
' ~- }: o5 L7 ?6 v* v. j" _- import pojo.MessageInfo;/ v) |1 [, ?! D; _
- import pojo.UserInfo;1 `, y7 g4 ? {' `* W. a
- 6 S' h& b# A, h w
- public class ChatManager {
- U9 e1 i* P8 Q5 C3 J6 @- Y - public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();8 B$ n) S% {; u2 }& T2 A& {! K
- public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();; L& E, d1 p i2 |9 y9 `; g
- public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
6 s+ c# M- ` T+ n5 x7 N5 I: R - public ChatManager(){
1 V! L. c( |5 N/ x - UserInfo userInfo = new UserInfo("0","所有人");1 f( g8 i, |5 ]; l
- sendUserList.add(userInfo);2 k# Z( R) p5 j5 q, k
- }3 n7 E5 l8 _, ]' R9 r0 \8 v8 G$ ^% r, q
- 5 R v, [7 F" g5 P
- public String updateOnlineUsers(String userName,boolean flag) {
* s% j+ n# G; ~& W - UserInfo userInfo=null;# d/ q9 U, p8 a, p: G
- WebContext context=WebContextFactory.get();
: u2 Q# v! C* T4 ^9 q - HttpSession session = context.getSession();
5 _( h6 E6 F" D! i9 d6 j* P% e - if (flag) {
9 w! P8 ] S! e" P5 A: o - userInfo = new UserInfo(session.getId(),userName);4 A+ N2 j1 ]( }5 ?) p! J7 N7 I/ D' ?
- onlineUsersList.add(userInfo);
% V3 C4 B* l n5 D7 E$ p - sendUserList.add(userInfo);* ?+ h) i( ?7 w( D, ?. k5 ~& z
- this.setScriptSessionFlag(userInfo);2 L6 o- s" p7 d1 S
- }& [7 j9 p7 [& b# p
- String currentPage = "/chat/index.jsp";7 W9 |) A- N4 D/ \' p
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);( F, o# t, r X8 [9 {$ E4 |
- Util allPageUtil = new Util(sessionsByPage);
- k1 Z' S8 Z" r- x4 b" a - allPageUtil.removeAllOptions("onlineList");
& ~9 ]; P* |& v0 m7 ]0 U: A - allPageUtil.addOptions("onlineList", onlineUsersList, "userName");! I7 g6 A; x: m( [# x$ n5 n
- allPageUtil.removeAllOptions("userList");
u( L) u( g( L; R - allPageUtil.addOptions("userList", sendUserList, "userId", "userName");
( X/ o* {8 ]: j! p' ?1 _# c - if (!flag) {
- {$ _5 p" z7 w s - return null;9 X, S+ _2 c* ^! H9 m, A
- }6 ?; b+ z7 O5 w$ z; H0 @, e
- return userInfo.getUserId();% @5 \9 e2 a8 b6 j, ?: G" }" p" y
- }& s$ X4 d- c( a7 x9 z
-
7 c9 A$ [/ e3 [2 L - public void setScriptSessionFlag(UserInfo userInfo) {
% F% t4 b; J% |& h" H# h6 |" |9 X$ B - WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);0 ^1 |/ O% `, o0 G! o2 W
- }
/ V! R6 t7 \; x: d+ a -
; M, Y4 M+ |5 t0 u. S - public Collection<ScriptSession> getScriptSessionFlag(String userId) {
- D# ^# Y3 v% q6 h$ I - Collection<ScriptSession> list=new ArrayList<ScriptSession>();6 \3 j) b J' L
- Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();( G# V8 v8 f9 E4 }" G4 l; ?6 w# S: y" e
- WebContext context = WebContextFactory.get();# z u6 e; H1 A8 r! `
- String currentPage = "/chat/index.jsp";
( v+ N* y6 E% \. X' n - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
( W+ ^( F1 @- j' U) j6 Y3 P# X - sessions.addAll(sessionsByPage);
2 ~2 x; |2 w! \. E/ D6 o2 y - if ("0".equals(userId)) {
2 o, |% x1 R2 B$ Y1 G3 m - list=sessions;
\6 N" N/ {# _$ | - }else{
2 S0 h9 l5 b2 E1 { - for (ScriptSession session : sessions) {
/ ?! v! c: F5 t/ a {1 s - UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");# }4 S5 |8 \ Z
- if (userId.equals(userInfo.getUserId())) {0 L1 u, K2 R- T0 j& g, I
- list.add(session);) i& G( C, v) d B3 x
- break;9 p4 X: y& |6 |6 @* G
- }
0 T3 F% k. M7 X" x6 r" q# \5 {; b - }
6 m# v2 ?0 Z; {8 o- Q4 H7 |9 l - }
) ~( c# _/ W. y" F) j - return list;& ?" p) V+ g( E0 N' J$ c1 P
- }) ?, D1 \) ~* b# y0 u; c. J: M
- 7 X5 }! {! @6 v) X) u0 t8 C
- public void sendMessage(String sender,String receiverId,String msg) {
" U: f+ t, q+ U+ I - Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);) F+ H$ l* @ M$ U+ H f
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);/ R4 _6 w( W8 i2 y8 f
- messageList.add(messageInfo);
, b$ p- h5 r( Y' l# ^: K" T - Util receiverUtil = new Util(scriptSessionFlag);
; A4 s7 D: N/ E" _: r* W0 I: t - receiverUtil.removeAllOptions("messageList");' A6 p) `$ h% C7 c7 r- w" J
- receiverUtil.addOptions("messageList", messageList, "msg");
+ V0 A" z1 p' }- U- P1 ~+ [ - }. U/ v; u6 z9 f' e9 U) D, n
- }
/ P5 J5 @( c) a% r2 |
复制代码 ) |$ X9 w K( s! T P
项目源码下载地址:点击下载: E- V( U' H7 H, I
+ K, I9 K) D% @& H$ y |
|