Example #1
0
// SessionManager must be read-locked
Call::Call(SessionManager *_sManager, unsigned int _id, unsigned int _client, unsigned int _translator, string lang)
: sManager(_sManager),
  id(_id),
  client(_client),
  translator(_translator),
  state(INIT),
  start_time(0), end_time(0), accounted(0),
  cost(0),
  price(0),
  client_balance(0)
{
	pthread_mutex_init(&mutex, 0);
	Session *cs = sManager->findSessionByUser(_client);
	if (!cs)
		throw logic_error("Client session not found.");
	if (!dynamic_cast<Client *>(cs->getUser()) || 
		(!TRANSLATORS_CALL && dynamic_cast<Translator *>(cs->getUser())))
		throw logic_error("Client not found.");
	Client *c = dynamic_cast<Client *>(cs->getUser());
	clientName = c->getName();
	Session *ts = sManager->findSessionByUser(_translator);
	if (!ts)
		throw logic_error("Translator session not found.");
	Translator *t = dynamic_cast<Translator *>(ts->getUser());
	if (!t)
		throw logic_error("Translator not found.");
	setTranslateLang(lang);
	setClientLang(t->getCommonLang(c));
	price = t->getClientPrice(c, lang);
	translatorName = t->getName();
}