//-------------------------------------------------------- // Handler. //-------------------------------------------------------- public void on_receive(CPlayer owner, CPacket msg) { PROTOCOL protocol = (PROTOCOL)msg.pop_protocol_id(); /*if (is_received(owner.player_index, protocol)) * { * // 플레이어가 이미 해당 프로토콜을 전송했다. 중복 처리 하지 않고 리턴한다. * return; * }*/ // 프로토콜을 받았다고 기록한다. checked_protocol(owner.player_index, protocol); // 상태 매니저에 패킷을 보낸 플레이어와 패킷 내용을 전달한다. // 이후 게임 로직은 상태 매니저를 통해 현재 수행중인 상태 객체에서 처리된다. //this.state_manager.send_state_message((PROTOCOL)msg.protocol_id, owner, msg); //this.state_manager.send_state_message(protocol, owner, msg); this.current_room_state.on_receive(protocol, owner, msg); }
/// <summary> /// 어플 실행 후 서버 접속시 닉네임과 함께 CPlayer 객체 생성 /// </summary> /// <param name="player_name"></param> public void enter_lobby(string player_name) { this.player = new CPlayer(this, player_name); }
/// <summary> /// 매칭 성공 후 플레이어들을 방에 입장 시킨다. /// </summary> /// <param name="player1"></param> /// <param name="player2"></param> public void enter_gameroom(CPlayer player1, CPlayer player2, CPlayer player3, CPlayer player4) { if (player1 == null || player2 == null || player3 == null || player4 == null) { throw new Exception("Player cannot be null."); } if (this.players.Count >= 4) { throw new Exception("This room is not empty."); } add_player(player1); add_player(player2); add_player(player3); add_player(player4); { this.players.ForEach(player => { CPacket reply = CPacket.create((short)PROTOCOL.START_LOADING); reply.push((int)player.player_index); // 본인의 플레이어 인덱스를 알려준다. player.send(reply); }); } }
public void error(CPlayer player) { player.disconnect(); }
public void remove_player(CPlayer oldbie) { this.players.Remove(oldbie); }
public void add_player(CPlayer newbie) { this.players.Add(newbie); }