void Peer::onConnection(Exception& ex, Writer& writer,DataReader& parameters,DataWriter& response) { if(!connected) { _pWriter = &writer; // reset default protocol parameters _parameters.clear(); Parameters::ForEach forEach([this](const string& key,const string& value) { _parameters.setString(key,value); }); string buffer; _handler.iterate(String::Format(buffer,protocol,"."), forEach); ParameterWriter parameterWriter(_parameters); SplitWriter parameterAndResponse(parameterWriter,response); _handler.onConnection(ex, *this,parameters,parameterAndResponse); if (!ex) { (bool&)connected = ((Entities<Client>&)_handler.clients).add(*this); if (!connected) { ex.set(Exception::PROTOCOL, "Client ", Util::FormatHex(id, ID_SIZE, buffer), " exists already"); ERROR(ex.error()); _handler.onDisconnection(*this); } } if (!connected) { writer.abort(); _pWriter = NULL; } else { OnInitParameters::raise(_parameters); DEBUG("Client ",address.toString()," connection") } writer.open(); // open even if "ex" to send error messages! } else