/* (non-Javadoc)
   * @see org.promasi.playmode.multiplayer.IClientState#onReceive(org.promasi.playmode.multiplayer.ProMaSiClient, java.lang.String)
   */
  @Override
  public void onReceive(ProMaSiClient client, String recData) {
    try {
      Object object = new XMLDecoder(new ByteArrayInputStream(recData.getBytes())).readObject();
      if (object instanceof GameStartedResponse) {

      } else if (object instanceof MessageRequest) {
        MessageRequest request = (MessageRequest) object;
        if (request.getMessage() == null) {
          client.sendMessage(new WrongProtocolResponse().serialize());
          client.disconnect();
        } else {
          _game.sendMessage(_clientId, request.getMessage());
        }
      } else if (object instanceof GameCanceledResponse) {
        changeClientState(client, new ChooseGameClientState(_server, _clientId));
      } else if (object instanceof LeaveGameRequest) {
        _server.leaveGame(_gameId, _clientId);
        changeClientState(client, new ChooseGameClientState(_server, _clientId));
      } else {
        client.sendMessage(new WrongProtocolResponse().serialize());
      }
    } catch (NullArgumentException e) {
      client.sendMessage(new InternalErrorResponse().serialize());
      client.disconnect();
    } catch (IllegalArgumentException e) {
      client.sendMessage(new InternalErrorResponse().serialize());
      client.disconnect();
    }
  }