void stateful_protocol_strategy_wrapper::Parse(
	const wchar_t* pData, int charCount, ClientInfoPtr pClientInfo)
{
	purge_dead_clients();

	std::weak_ptr<ClientInfo> weak(pClientInfo);
	ProtocolStrategyPtr strategy;
	auto strategy_iter = strategies_.find(weak);

	if (strategy_iter == strategies_.end())
	{
		strategy = factory_();
		strategies_.insert(std::make_pair(weak, strategy));
	}
	else
	{
		strategy = strategy_iter->second;
	}

	strategy->Parse(pData, charCount, pClientInfo);
}
Esempio n. 2
0
	virtual void parse(const std::basic_string<wchar_t>& data)
	{
		auto p = data.c_str();
		strategy_->Parse(p, static_cast<int>(data.length()), client_info_);
	}