'전체채팅'에 해당되는 글 1건

전체 채팅


전체 채팅은 채팅서버 관리자나 유료서비스 등으로 전체 채팅사용자를 위한 서비스이다.


해쉬맵을 이용해 사용자를 관리하기 때문에  <String, PrintWriter>

채팅할 때 마다 DB에서 사용자를 조회하지 않아도 된다.


...

Iterator<String> it = clientMap.keySet().iterator();


while (ity.hasNext()) {

mem = ity.next();

PrintWriter it_out = (PrintWriter) clientMap.get(mem);


it_out.println(URLEncoder.encode("##전체##[" + time.format(today) + "] [" + user + "] " + msg, "UTF-8"));

}


...



전체 채팅은 간단하다.

일단 해쉬맵에 있는 사용자를 불러오는 방법은 Iterator로 하면 된다.

Iterator란 자바의 Collection Framework(자료구조)에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법 중 하나이다.


해쉬맵에서 사용자 이름(Key값)을 불러와 Value값인 Printwriter를 이용해 채팅을 보낸다. it_out.println(내용);



--------------------------


방 채팅


방 채팅은 한마디로 같은 방에 있는 사람에게만 채팅이 보내지는 것이다. 이게 일반적인 채팅이라고 할 수 있다.

그러기 위해선 먼저 채팅을 보내는 사람이 어느 방에 있는지를 파악해야한다. 그리고 같은 방에 누가있는지 파악해야한다.


사용자가 들어올때 Hashmap에 사용자의 닉네임과 Printwriter를 저장했다. clientMap.put(name + "@1", out);

(DB를 사용해 파악을 한다면 쉽겠지만 채팅할 때마다 DB를 조회한다면 DB접속이 많아져 추천하지않는다.)


닉네임 뒤에 @방번호를 넣어 사용자를 관리한다. 그리고 방 이동시에 @뒤에 있는 방번호를 해당 방번호로 바꾸면 된다.



...

if (uname.contains("@")) {

int idq = uname.indexOf("@");

uname = uname.substring(0, idq);

}

Iterator<String> it = clientMap.keySet().iterator();


while (it.hasNext()) {

mem = it.next();

if (mem.contains(user))

user = mem; // mname@rloc

}


int idq = user.indexOf("@");


String rmNum = user.substring(idq + 1); // 방번호 추출


String msg = chkBannWord(chkmsg);



int cnt = 0;

Iterator<String> ity = clientMap.keySet().iterator();

while (ity.hasNext()) {

mem = ity.next();

try {

PrintWriter it_out = (PrintWriter) clientMap.get(mem);

it_out.println(URLEncoder.encode("[" + time.format(today) + "] [" + uname + "] " + msg, "UTF-8"));

}

} catch (Exception e) {

// TODO: handle exception

}

}

}


...

블로그 이미지

허니눈

,