2013년 2월 6일 수요일

PacketWriter and PacketReader in Smack

- PacketReader

1. XML 파싱을 위해 XMLPullParser 를 사용
2. done 이라는 boolean 값을 두어 필요시 reading을 끝낼 수 있도록 한다.
3. 서버로부터 오는 패킷을 읽기 위해 쓰레드 생성
4. 서버와의 처음 연결시 응답이 오는 것의 확인을 위해  Semaphore(1) 사용
  semaphore 획득 -> timeout을 가지고 재획득 요청
  -> 지정한 timeout안에 응답이 오면 앞의 reading을 위한 thread에서 semaphore를 release함 -> connectionID 설정
  -> 지정한 timeout안에 응답이 오지 않으면 semaphore 획득에 실패 -> 에러 처리
5. 서버로부터 패킷이 오면 이를 처리하기 위해 ExecutorService를 사용
  쓰레드의 관리(tracking)를 편하게 하기 위해 ExecutorService를 사용함

- PacketWriter

1. 패킷을 보내는 용도로 사용하는 쓰레드 생성
2. 패킷을 보내는 경우 바로 writer를 통해 보내지 않고 queue(ArrayBlockingQueue)에 데이타를 넣는다.
3. 처음 시작시 서버와의 연결을 위한 패킷을 보내고 queue에 데이타가 들어오기를 기다린다. 데이타가 들어오면 깨어나서 패킷을 처리한다.
4. 서버와의 접속 유지를 위해 keep alive 패킷(white space)을 보낸다. 이를 위해 별도의 쓰레드를 생성한다. 이 쓰레드는 지정한 시간 sleep 후 패킷 보내고 다시 sleep하는 것을 반복한다.
5. writer 변경을 위한 setWriter 함수를 제공한다.


댓글 없음:

댓글 쓰기

Building asynchronous views in SwiftUI 정리

Handling loading states within SwiftUI views self loading views View model 사용하기 Combine을 사용한 AnyPublisher Making SwiftUI views refreshable r...