화니 프로젝트/USN2차

세부 구현내용 2008.1월

깡다구짱 2008. 10. 3. 20:31

2008.1.2 시그정보(mes_sig)


 

  • 시그에 대한 정보 추가
  • 시그에 대한 추가 모듈과 삭제모듈, 수정모듈( 나중에 서버 UI코딩때)
  • 이 정보는 클라이언트에서 기능적으로 시그단위로 사용자를 뿌려주거나 기수별로 뿌려주는 기능에 쓰인다. 
  • 이 정보는 그룹정보 + 시그정보 + 각 회원에 대한 정보로 처음 접속시 뿌려지는 정보에 속한다.

 

 

 


2008.1.4 구현 방안


 

  • 프로필 정보들이나 알림말 정보를 수정할 때 그 이전값을 미리 뿌려줘야 하는데...그떄 서버에서 뿌려주는지..아니면 클라이언트가 가지고 있다가 뿌릴지 결정( 처음 접속시에 몽땅 뿌려주는 걸로 결정 )

 

  •  그룹에 대한 클라이언트와의 통신과 친구목록에서의 이동 또는 복사에 대한 통신 확인

 


북서버 정보 제공에 대한 구성


  • 북서버 정보 제공을 위해 북서버에 대한 아이디와 비번을 연동하는 식으로 하고 서버는 요청시에 해당 유저의 이 아이디와 비번정보를 이용하여 북서버 관련 디비를 접근하고 검색한다.
  • 기존의 북서버 디비인 lendinginfo_view를 이용하여 id값을 이용하여 검색한다. 
  • 연동후 mes_bookid값과 mes_bookpass값이 저장되는데..이후에 북서버에 대한 검색을 할 때

    해당 유저의 인덱스값으로 검색하여 mes_bookid값을 구하고 그 값으로 해당 lendinginfo_view 값을 본다.

  • 북서버에서 검색기능 제공에 대한 유무 - 큰 문제는 없으나 많은 데이터를 서버가 보내야 할때 그 버퍼(2048)

    에 대한 문제점

  • 검색을 추가한다면 책 이름만 검색하도록 한다. 
  • 검색시 이 책이 대출중인지..어떤지에 대한 정보가 중요한데..이것은 일단 유보... 
  • 현재 들어온 신간도서에 대한 정보. 한달 단위로 끊어서 보여줌( 현재 북서버와 마찬가지로 ) 
  • 세미나 정보또한 모든 정보를 다 담아서 뿌려줌..오늘 것만...정보 제공..(검색기능 없음) 

 


 2008. .1. 6 구현내용


  • 클라이언트가 SER_FRIEND_ALL 을 통해 자신의 프로필 정보를 요청하면 서버가 그 값들을 DB로 부터 가지고

    와서 전송할 버퍼에 담는 작업 - 클라이언트와 실행무

  • 세미나 정보를 담을 버퍼 계산(2048) - 10개의 세미나로 계산 한 세미나당 최대 220정도의 버퍼 필요
  • 세미나 정보를 담는 작업 - 세미나종류 , 발표자, 세미나명, 발표시간 ~~ 마지막 버퍼에 총 세미나 갯수

     

 


접속시간에 대한 기능 구현안


  • 접속시간에 대한 기능은 운영자님에게만 부여된다.
  • 접속시간 기능의 범위는 각 개인이 어떠한 작업을 하고 있는지( 일반 사용, 게임 중 )에 대해서만 뿌려준다. 
  • 각 개인의 클라이언트는 자신이 사용하고 있는 프로세스를 타이머를 가지고 반복하여 검사하게 되고 만약 운영자쪽에서

    각각 사용정보를 원할 때 그 프로세스정보에 대한 결과를 뿌려주며 자신의 프로세스가 바뀔때만 뿌려주게 된다.

  • 각 클라이언트는 처음 접속시와 2분마다 자신이 살아 있다는 것을 체크하는 타임에 자신의 프로세스 정보를 서버에 뿌려주게 되고

    서버는 이 정보를 mes_memberDB에 저장해 놓은다.

  • 운영자 클라이언트가 이 정보를 원하고자 한다면 서버는 이 정보를 모으되 [ 해당유저의 아이피 뒷자리 | 상태인덱스번호 ]로 간단하게 뿌려준다

    최대 4바이트를 사용하며 100명인 경우 400바이트를 사용하게 된다.

  • 많은 데이터가 가는 것이 아니므로 중복되는 상태또한 보내도 관계없을 듯하다. 괜히 서버에서 부하가 더 많이 작용할 것 같다. 
  • 종합하면 뿌려주는 시기는 총 2번이다. 1. 타이머에 의해서.. 2. 로그인시... 
  • 뿌려준 데이터는 서버가 해당 사용자 디비에 업데이트하여 고쳐 넣는다. 
  • 상태값 초기는 1번인덱스인 '정상사용중'이며 회원가입시 데이터를 넣을 때 서버내에서 같이 들어간다. 

 


다이얼로그로 뿌려줄 주된 기능


  1. 도서 대여 정보
  2. 회원 프로세스 사용정보( 운영자 메신져 ) 
  3. 콘덴츠 정보 ( 보기 , 추가하기 )
  4. 세미나 정보 
  5. 해당 유저의 세부 정보 ( 프로필 정보 )
  6. 회원의 개인 정보 설정 

 


메신져 본래 기능( 세부 기능 )


  1. 쪽지 [- 태은]
  2. 대화 [- 태은]
  3. 파일전송 [- 태은]
  4. 긴급공지 ( 운영자 메신져 ) - 접속한 사람만 받는다. [- 태은]
  5. 친구리스트 - 원래 그룹을 통해 친구리스트를 나열하며 버튼같은 것으로 시그끼리 다시 묶을 것인지 기수끼리 묶을 것인지 기능이 존재 [- 태은]
  6. 바로가기 기능 - 버튼탭 기능 [- 태은]
  7. 메모 기능 [- 태은]

  8. 센서 정보 뿌리기 [- 태은]
  9. 북서버와의 연동기능 [- 태은]
  10. 회원들 일일 메모 보기 

 


동기화 문제


  • DB에서의 동기화문제 - SQL서버내에서 해결가능
  • 패킷 Send에 대한 큐와 Recv에 대한 큐에 대한 접근시 동기화 ( m_ListCs )
  • 현재 두 큐에서 가진 패킷을 갯수에 대한 값 수정시에 동기화 
  • 현재 접속중인 클라이언트에 대한 소켓 컨텍스트정보를 가진 리스트에 접근시 동기화 
  • 초기접속시나 세미나 정보등 클라이언트측에게 정보를 뿌리기 위해 쓰는 버퍼는 각 클라이언트가

    접속시 각각 버퍼를 할당해주며 해당 클라이언트가 할당받은 버퍼만을 이용하여 전송하면 된다.

  • 하나의 버퍼를 같이 쓰기로한 세미나 버퍼에 대한 접근시 동기화 처리 ( m_CS_Seminar ) 

 


서버 UI


  • 1차에 있는 TAB 컨트롤 사용하여 현재 진행중인 작업을 뿌려줌
  • 현재회원에 대한 리스트 - 삭제기능 
  • 회원 삭제시 다른 그룹정보에 대한 데이터베이스 충돌

    •  자신의 mes_group의 idx값들을 리스트로 구성한뒤 해당 리스트의 idx값을 가진 mess_group_info값을

      다 지운 후 group정보도 지우고 자신이 소유한 다른 회원의 그룹정보도 삭제한뒤 mes_memberDB값을

      삭제한다.

 


센서 정보


  • 일반 적인 센서정보는 메인DLG에서 이루어지며 뒤에 따라 붙는 세미나 정보(P정보)는 TCPServer클래스에서 함수로 구현되어있다.
  • 초기 세미나 갯수에 대한 정보는 TCPServer의 소켓 초기화 함수에서 값이 세팅되며 모든 클라이언트가 이 정보를 같이 쓰게 된다.
  • 메인DLG에서의 OnTimer함수에 의해 일정 시간마다 세미나 갯수를 갱신하며 이 값은 Sensor정보가 전송될 떄 같이 붙어 보내게 된다.
  • 클라이언트가 따로 세부 세미나 정보를 요청할 떄 정보 끝에 총 세미나 갯수 정보를 또한 보내주며 이 값을 받은 클라이언트는 이 값으로

    메인 세미나의 갯수를 갱신해 주어야 한다.

 


접속시간


  • 로그인시와 Ontimer에 의하여 일정시간마다 접속시간을 업데이트한다.
  • mes_memberDB( mem_logintime변수 사용 ) 
  • 로그인시 최초 접속시간을 알아내어 그 정보를 저장하고 1시간마다 현재 접속중인 클라이언트의 소켓컨텍스트정보를 가진 리스트를

    이용하여 IP주소를 얻는다.

  • IP주소를 이용하여 해당 회원의 인덱스값을 찾고 그 값을 이용하여 해당 회원들의 로그인 시간을 업데이트 한다. 

 


외침말


  • 외침말은 하루 즉 24시간 마다 갱신이 된다.
  • 초기화는 OnTimer함수에 의해 작동하고 Heart bit전송시에 현재 시간이 00:00이 넘었는지 확인하여 초기화 루틴으로 이동한다. 
  • 외침말에 대한 모든회원 정보는 클라이언트가 로그인되고 일정시간후 클라이언트의 ONTimer함수에 의해 일정시간뒤에 전송을 요구한다. 
  • 전송내용은 "123|안녕하세요~|73|반갑습니다.||" 형식으로 아이피 주소의 마지막 번호와 외침말로 이루어져 있다.