Пример #1
0
static void del_client (struct client *cli)
{
	cli->socket = -1;
	LOCK (cli->events_mtx);
	event_queue_free (&cli->events);
	tags_cache_clear_queue (tags_cache, client_index(cli));
	UNLOCK (cli->events_mtx);
}
Пример #2
0
/* Generate a unique playlist serial number. */
static int gen_serial (const struct client *cli)
{
	static int seed = 0;
	int serial;

	/* Each client must always get a different serial number, so we use
	 * also the client index to generate it. It must also not be used by
	 * our playlist to not confuse clients.
	 * There can be 256 different serial number per client, but it's
	 * enough since clients use only two playlists. */

	do {
		serial = (seed << 8) | client_index(cli);
		seed = (seed + 1) & 0xFF;
	} while (serial == audio_plist_get_serial());

	debug ("Generated serial %d for client with fd %d", serial, cli->socket);

	return serial;
}
Пример #3
0
void ServerLink::ReceiveInitialMessage() {
  while (IsActive()) {
    auto packet = Packet::Receive(*socket_tcp_);
    if (packet.type() == Packet::Type::kInitialMessage) {
      auto init_message = InitialMessage(packet);
      handle_received_.InitialMessageData(init_message);
      server_slot_ = init_message.client_index();
      if (server_slot_ >= init_message.max_clients()) {
        handle_received_.ErrorMessage("Server is full.");
        Error::LogToFile("Server is full.");
        Disconnect();
      }
      return;
    } else if (packet.type() == Packet::Type::kSocketDisconnect) {
      Disconnect();
      return;
    }
  }
  Error::LogToFile("initial message recieved.");
}