Skip to content
eunjiChung edited this page Mar 28, 2017 · 7 revisions

#Index

  1. What is Server?
  2. Structure
  3. What Design Principles Underlie Server?

What is Server?

Server는 게임 프로토콜 통신을 담당한다. Front에는 observer들과 접속한 player들에 대한 정보를 전달한다. Player들이 매칭될 경우, 게임을 실행하고, 게임에 관한 정보로 구성된 Room을 생성한다. 게임 실행 중에는, GameBase와 player간의 게임 정보를 송수신한다. 이때, 알맞은 프로토콜 메세지를 전달하는지 검사한다. 게임 전반적인 실행을 담당하는 부분이다.

Structure

battle.ai
|
+---server
|   |
|   +---conf
|   |       __init__.py
|   |       conf_reader.py
|   |       my.conf
|   |    
|   +---gameobject       
|   |       __init__.py
|   |       room.py
|   |       user.py
|   |  
|   +---handler
|   |       __init__.py
|   |       dbhandler.py
|   |       gamehandler.py
|   |       mongodbhandler.py
|   |       observerhandler.py
|   |       playerhandler.py
|   |       turngamehandler.py
|   |
|   +---model
|   |       game_log.py
|   |       player.py
|   |
|   \---__init__.py
|       debugger.py
|       string.py
|
\---playground.py
   my.conf

What Design Principles Underlie Server?

overall description

Player 간 AI 대전은 TCP connection 을 통해 이루어진다. 이 게임 내용에 대해서는 websocket 을 통해 client 에 전송 되며 webpage 에서 볼 수 있다.

  • playerhandler
  • gamehandler
  • observerhandler
  • webpagehandler

=== ####1. playerhandler

player 의 TCP connection 연결 및 name 설정을 해주는 부분이다.


`handle_stream`

player가 서버에 접속하면 실행되는 부분. 콜백에 의해 __accept_handler 호출하며, player의 스트림 정보를 넘겨준다.


`__accept_handler`

player의 스트림 정보를 받아 Player객체를 생성한 후, 해당 player를 player 리스트에 추가한다. attendee에게 추가된 player 정보를 뿌려준다. 실패할 경우, 실패 메세지를 전송한다.


`_on_close`

player의 스트림이 종료될 경우 실행된다. player_list에서 해당 player를 pop하고 attendee에게 알린다.


####2. gamehandler

게임 실행에 필요한 인스턴스들을 모두 포함한 클래스.


`run`

실질적으로 게임 시작과 종료를 다루는 메소드. _player_handler를 통해 player의 게임 플레이 정보를 받아온다. 게임이 종료될 경우 destroy_room()으로 해당게임을 위해 생성된 room을 파괴한다.


`_play_handler`

player의 게임 플레이를 다룬다.


`request_ready`

시합 준비가 되었는지 확인한다. 각 player 들에게 ready 가 되었는지 확인하는 message 를 보내며 response 가 OK 이면 게임을 시작하게 된다.


`on_init_game`

game base 에게서 받아온 initial data를 class variable 에 저장하는 함수이다.


`find_player_by_pid`

player id 를 이용해 해당 player 객체를 return 하는 함수


`request`

callback function이다. game part 가 이를 호출해 player 에게 다음 행동에 대해 request 한다.


`notify`

callback function이다. game 진행 상황에 대해 observer에게 notify 해준다.


`on_end`

게임이 종료될때 game파트에 의해 호출되어 게임 결과 정보를 출력한다. error_code 가 param 으로 넘어오며 이를 통해 게임 종료가 어떻게 되었는지 판단 할 수 있다.


`handle_game_end`

게임 종료 되었을 때 일어나야 되는 행동에 대하여 묶어놓은 함수이다.


`destroy_room`

게임이 종료되면 room을 파괴한다. player들은 robby로 돌아간다.


`delay_action`

게임 플레이에 딜레이를 준다.

####3. observerhandler

관전자와의 websocket 통신을 담당한다.


`initialize`

observer, player 리스트, 그리고 디비를 초기화한다.


`open`

새로운 observer를 받아 observer 리스트에 추가한다.


`on_message`

observer로부터 메세지를 받았을때 호출되는 메소드.


`on_close`

observer의 connection이 끊어졌을 때 호출된다. observer_list 에서 해당 observer를 삭제한다.


`check_origin`
`_response_user_list`
`_response_match`

player 간의 match request가 왔을 때 호출된다. 해당 player들 간의 game을 위한 방을 만들고 game을 실행한다.