TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。 + ~5 H9 A% I2 e( ^0 _* k3 d0 e
功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java5 i2 Y' ] A3 n- D
6 K7 j5 c- j q3 L+ X) ]- package services;6 L1 ~/ `8 q: G! M1 r+ C, @% ^; i
- m. d8 ], M$ W2 ^3 @- import java.util.ArrayList;
) B8 u7 O$ H: E& a& p - import java.util.Collection;
/ k5 v5 u: M7 l" ^ - import java.util.List;
' F% L' W" S% _, b. N, b! ~
) l% r+ P$ k" c8 h% |3 G- import javax.servlet.http.HttpServletRequest;0 B, a, s6 a$ I# I/ z* _7 g
- import javax.servlet.http.HttpSession;: Q8 {; y" [3 R0 m7 ~. O# J) P
% |7 g0 y y1 X ]- import org.directwebremoting.ScriptSession;* o+ g& n+ A( K9 T" F# Y! U) T
- import org.directwebremoting.WebContext;) A( s9 s' M5 ?4 F% t8 T2 r* Y
- import org.directwebremoting.WebContextFactory;4 l4 r1 l; l1 K$ ~$ p! x
- import org.directwebremoting.proxy.dwr.Util;3 G3 _. `+ J) }3 H% j/ \
- ' d$ ?% Z6 c8 s/ `* g
- import pojo.MessageInfo;; i3 P. N6 {3 G
- import pojo.UserInfo;) m# x, L# a( G8 e9 v/ ?1 ?! T
- ( \3 ~8 g# |+ I9 e
- public class ChatManager {- s, j/ V% t O& H; T q' Y" K4 |% H
- public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();
( V" h7 X) R& l - public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();
, q6 n7 t1 y( y; S7 ` - public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
C0 N' n2 L7 ] - public ChatManager(){6 ^9 v+ L; L: z3 E# r3 o5 w
- UserInfo userInfo = new UserInfo("0","所有人");+ _* U# _3 B5 a N6 ]* q# X! E. q$ U
- sendUserList.add(userInfo);
- ?2 o, }: ?# Y$ F) s% b: l4 s - }
2 F, R2 C$ h" s4 r6 L8 f; @ -
. s. T5 P9 T. N5 P - public String updateOnlineUsers(String userName,boolean flag) {. M+ @' b9 X, x- i) N0 g
- UserInfo userInfo=null;! t. c2 M$ X& {, y2 N; I
- WebContext context=WebContextFactory.get();% V5 t7 z0 _6 u$ [; J( m
- HttpSession session = context.getSession();9 }; {- i( v4 |6 z% u: K
- if (flag) {; c6 }1 [- M& O6 \! }& q; t M7 q2 G
- userInfo = new UserInfo(session.getId(),userName);6 c7 q: e' @% G8 v
- onlineUsersList.add(userInfo);
; |: q+ P8 d$ |6 d& A2 ] - sendUserList.add(userInfo);5 F. E2 D2 D9 c2 K, Z
- this.setScriptSessionFlag(userInfo);% y6 y7 h" C0 f& Y) h" X% q( B
- }
+ ?7 ^# X/ z+ S1 @! q' X - String currentPage = "/chat/index.jsp";+ h( {: d% f' _" I+ D: l8 b
- Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
* `; b( b: M$ s ?( [0 h/ n - Util allPageUtil = new Util(sessionsByPage);
! n2 | M4 @/ Y, Z( ` - allPageUtil.removeAllOptions("onlineList");
+ H% g/ P5 ~, A6 a1 ~0 @. I - allPageUtil.addOptions("onlineList", onlineUsersList, "userName");6 x; L- `' {/ s" {& G: |# j
- allPageUtil.removeAllOptions("userList");; p' j1 F# j" o6 T! V( C8 A
- allPageUtil.addOptions("userList", sendUserList, "userId", "userName");) `6 I1 Q& \" t0 n. K
- if (!flag) {( G2 T2 l- S, e1 |$ F0 m5 R1 ^& E
- return null;% r9 R/ j8 D- V( B
- }
u) J( ]) q9 T' @' T - return userInfo.getUserId();# ^$ Z; K5 n& P/ B3 E" T1 O
- }! v# i! k3 L8 @2 a4 o1 `8 d
- 9 j% V, ~0 b; [* e: H: S: I
- public void setScriptSessionFlag(UserInfo userInfo) {7 z+ J+ p' s! A W/ ], [7 q
- WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);
5 ]4 A# z" `6 b7 o0 c) N ~ - }; P) c6 K, w: s% x- O; z
-
- N+ r7 D3 z* F9 j+ t) z: N - public Collection<ScriptSession> getScriptSessionFlag(String userId) {
* n4 Y1 ]7 M) J, Y" p, V - Collection<ScriptSession> list=new ArrayList<ScriptSession>();4 d5 m6 |# g; P# o/ I
- Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
) W; |" g& c" F' t4 L: n! J - WebContext context = WebContextFactory.get();5 L5 b, W) E' ?4 M0 C
- String currentPage = "/chat/index.jsp";
7 i! l$ J/ D3 z1 o0 D" L - Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);# q# j$ e/ N8 {, T' C9 N: }- k
- sessions.addAll(sessionsByPage);
* N- \. d, B$ u2 }! C3 O+ S - if ("0".equals(userId)) {2 o/ F- b) b5 o$ a# Y
- list=sessions;$ W" ^/ b L7 @/ @
- }else{
" P5 `0 r/ z6 ? - for (ScriptSession session : sessions) {5 Q9 s6 o- ]: T2 B& a4 y
- UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");
7 ]( h2 |: n/ r* c! H$ q - if (userId.equals(userInfo.getUserId())) {( { L- l8 A. X6 F/ n1 M$ v8 K
- list.add(session);
; N& {' t( j8 `) \0 ^; B: s - break;* y( b9 ?% x4 G8 y2 c$ u
- }
, P" A. X5 ^3 D" c7 J" d - }
8 p ] {2 N6 Y7 e( C: O4 y - }
' B* M0 B' _# ` - return list;" y. G3 Y2 e; l' v a) n/ \
- }
; ~, j+ J: u- G1 N% w - - A) f4 F- n) S. a% S
- public void sendMessage(String sender,String receiverId,String msg) {
; m s/ Y; k& D8 v - Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);3 ]* }1 M& Z) P3 b4 H
- MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);3 ?# C4 d4 f! s3 g1 G4 e+ l% x, Y
- messageList.add(messageInfo);
$ U: d; v9 K, Z$ m - Util receiverUtil = new Util(scriptSessionFlag);
# h+ F8 N9 N1 p2 P - receiverUtil.removeAllOptions("messageList");4 l1 j/ n* Z2 \9 h, L1 g: A
- receiverUtil.addOptions("messageList", messageList, "msg");
; ^4 y: ]7 |. F I/ T1 r& E/ k8 w - } Z! r' `7 T( S/ @* D7 f7 o4 s
- }
/ S, O7 Q# m4 i! Q/ I2 ?
复制代码
/ T# q- [6 o" |; _" q) S0 p项目源码下载地址:点击下载' y6 _2 j9 \! {5 ~. _: ~! w1 Q
( R3 O" m, ]/ X |
|