void ServerBase::clientEvent(ClientBase* client, GameEvent* event) {
  unique_lock<mutex> lock(_lock);

  auto playerIDItr = _assignedIDs.reverseFind(client);
  if(playerIDItr == _assignedIDs.reverseEnd()) {
    if(event->type == AssignName) {
      Info("Attempting to assign name to client");
      AssignNameEvent* e = (AssignNameEvent*)event;
      lock.unlock();
      if(!assignClient(client, e->name)) {
        Error("Failed to assign client to name " << e->name);
      } else {
        Info("Accepted client " << e->name);
      }
      return;
    } else {
      Error("Unassigned client attempting to send data to the server");
      return;
    }
  }
  PlayerID playerID = playerIDItr->second;

  auto clientNameItr = _assignedClients.reverseFind(client);
  if(clientNameItr == _assignedClients.reverseEnd()) {
    return;
  }
  string clientName = clientNameItr->second;
  Debug("Received client event from " << clientName << " (ID " << playerID << ")");

  EventMap<PlayerID> results;
  _core->processPlayerEvent(playerID, event, results);
  sendEvents(results);
}
Example #2
0
void continueAfterClientCreation0(RTSPClient* newRTSPClient) {
  if (newRTSPClient == 0) return;

  assignClient(ourClient = newRTSPClient);
  streamURL = newRTSPClient->url();

  // Having handled one "REGISTER" command (giving us a "rtsp://" URL to stream from), we don't handle any more:
  Medium::close(handlerServerForREGISTERCommand); handlerServerForREGISTERCommand = NULL;

  continueAfterClientCreation1();
}