TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
8 w$ Q3 v& p( C$ ?7 D% S8 M功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java8 @& i% Y' Z2 m) s& g0 x9 w
0 s9 e+ S& g( o/ E2 h) U
- package services;
8 ^9 ~$ U" t1 r" |. d9 a
$ O- r$ o8 M. v+ u7 X- import java.util.ArrayList;' C; D4 b; A( Z% c
- import java.util.Collection;) t/ {5 ?- J5 F2 l7 ?
- import java.util.List;
E7 _- Y1 Z9 z# A. m - 7 t# `% r7 `' }# f: ]4 R
- import javax.servlet.http.HttpServletRequest;4 k0 H* o6 M! G$ k
- import javax.servlet.http.HttpSession; H) X- y8 o$ O7 x8 l# D( g) x) s
- 6 d/ K6 O* U6 ~. e @6 J
- import org.directwebremoting.ScriptSession;
8 i# m4 q* z8 {+ m - import org.directwebremoting.WebContext;
0 R8 k+ x+ `* G - import org.directwebremoting.WebContextFactory;- O: K; I7 z9 e
- import org.directwebremoting.proxy.dwr.Util; Q# c$ C) \) f* Q4 b
- 0 [! U. a/ A; D# ^/ q1 g
- import pojo.MessageInfo;
1 ^, F J7 F/ j, M - import pojo.UserInfo;
' g% ]6 ^, \8 x* O( B2 N, h - $ B. G- |3 @& x: Y- m5 u- t5 V
- public class ChatManager {- O- n' k3 B/ A
- public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();) b: ?$ \/ W" |$ w: B
- public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();5 i% S4 h7 u1 g0 U* }3 i
- public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();' S# [. V" c/ N: T: C/ D# j
- public ChatManager(){
( e) q( A, w1 \. t. u6 w _; H6 i - UserInfo userInfo = new UserInfo("0","所有人");0 n$ N: `7 v1 N& j; i* q
- sendUserList.add(userInfo);7 l2 I$ v% m8 F7 N0 w
- }
. p+ v8 ~5 H( H% H% h/ ^9 f - 0 a' m7 b/ W8 b! B2 h, {! L
- public String updateOnlineUsers(String userName,boolean flag) {- s; x9 W8 e( |/ q( f# i
- UserInfo userInfo=null;' b, w. M' ?( g0 Q7 s2 T
- WebContext context=WebContextFactory.get();( Q% N! W/ m/ v& s
- HttpSession session = context.getSession();$ e' M2 a4 y% P3 {
- if (flag) {
6 C# k; N! y, G: O$ C - userInfo = new UserInfo(session.getId(),userName);7 N5 S* e' x+ E; c
- onlineUsersList.add(userInfo);- b& q4 E O A. f$ A
- sendUserList.add(userInfo);
' s* j ?. d% G+ F( J; x( V - this.setScriptSessionFlag(userInfo);
* i. ~4 G" T! B - }
7 h( c0 S4 `3 k - String currentPage = "/chat/index.jsp";7 { k# m4 L* W, r5 o
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
2 g1 V* ]7 E4 e - Util allPageUtil = new Util(sessionsByPage);- \) I: v4 B) E1 J/ F5 F# p0 [" y
- allPageUtil.removeAllOptions("onlineList");
9 N! f( _; @3 P - allPageUtil.addOptions("onlineList", onlineUsersList, "userName");% u O, J2 M( I$ X% q9 R8 j
- allPageUtil.removeAllOptions("userList");# n E3 J0 m1 |. w
- allPageUtil.addOptions("userList", sendUserList, "userId", "userName");/ N) ^4 s( j' J# E# D
- if (!flag) {, d6 g' A6 S! u% A( p; |( E2 b& p
- return null;
t8 b* @$ b8 ?2 C N - }) j7 u6 x( n- E, E1 |9 |
- return userInfo.getUserId();
# V5 \0 }" p' A/ L, {" K; Q7 @ - }9 y1 f4 e, i* \) G, l5 C
-
' Z7 C( r& T" \* N4 c2 P7 ^' n - public void setScriptSessionFlag(UserInfo userInfo) {3 U( l+ b4 p- [* J" S: P: U% k5 j
- WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);
' J; ^" E: e# k9 a6 }& r - }' d! l. F9 }4 w3 @$ A" [
-
; ~0 k8 h* V; p - public Collection<ScriptSession> getScriptSessionFlag(String userId) {
5 Y0 ]$ W2 G( P- L' @# G - Collection<ScriptSession> list=new ArrayList<ScriptSession>();1 u. F& a0 [3 z4 G6 x, a1 d: O
- Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();8 S( j V6 b* W( M
- WebContext context = WebContextFactory.get();
& a6 n" Y7 w' K- C; V - String currentPage = "/chat/index.jsp";9 c1 W; Z! c& h" c, J2 V9 z. r* ?
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);4 \) b& @% a) w' k1 M1 f+ X T' S
- sessions.addAll(sessionsByPage);
4 N' S5 E" a# ?' C - if ("0".equals(userId)) {
3 i( f E$ P* u' h3 h - list=sessions;. u2 n' ]/ l& ~* X0 h% f
- }else{
" b$ C! f% y4 t% p - for (ScriptSession session : sessions) {
4 a6 ~+ t C, }) K3 u - UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");/ O' R3 |! A8 W9 b" H# a
- if (userId.equals(userInfo.getUserId())) {
S9 S/ e6 m' O( B' u9 U4 @ - list.add(session);
; I8 d. ]. ~; v* c - break;8 W8 Z5 o4 i+ F6 E I+ T
- }1 K% A: j6 x( d* u6 e2 E0 E, e+ U
- }7 {) u. w" W5 q6 _* H" Z2 I) {
- }
, u+ h/ S6 I D& Y! s - return list;
l% h1 A5 `4 g. K! n: k$ h8 u - }
7 c; H5 L! |% @* \# o2 |+ I& `' F - ( h1 ]# J) B- W/ h
- public void sendMessage(String sender,String receiverId,String msg) {
+ [& g, ^5 O' x; F0 D, M - Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);
" j/ c" j4 b5 m$ H+ j2 g3 Z3 x - MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);9 s3 e7 C5 ]* q# L( n1 r8 C
- messageList.add(messageInfo);
$ w$ l/ }6 E! x! H - Util receiverUtil = new Util(scriptSessionFlag);
5 u j3 ]1 p+ S- w - receiverUtil.removeAllOptions("messageList");
- y ~! I; [0 m4 } - receiverUtil.addOptions("messageList", messageList, "msg");; C$ Z5 \ a" Z
- }
* X7 B) A' y4 a* i. T; Y, { - }9 s, _; e4 H! K5 [ P
复制代码
$ T, ^" |" N3 ~" |3 W) v项目源码下载地址:点击下载
' W0 J) \, \, G
& r; F2 x9 m7 V, U1 t8 D& M |
|