예제 #1
0
LiveTVPlayback::preferredCards_t LiveTVPlayback::FindTunableCardIds(const std::string& chanNum, const ChannelList& channels)
{
  // Make the set of channels matching the desired channel number
  ChannelList chanset;
  for (ChannelList::const_iterator it = channels.begin(); it != channels.end(); ++it)
  {
    if ((*it)->chanNum == chanNum)
      chanset.push_back(*it);
  }
  // Retrieve unlocked encoders and fill the list of preferred cards.
  // It is ordered by its key liveTVOrder and contains matching between channels
  // and card inputs using their respective sourceId and mplexId
  std::vector<int> ids = GetFreeCardIdList();
  preferredCards_t preferredCards;
  for (std::vector<int>::const_iterator itc = ids.begin(); itc != ids.end(); ++itc)
  {
    CardInputListPtr inputs = GetFreeInputs(*itc);
    for (CardInputList::const_iterator iti = inputs->begin(); iti != inputs->end(); ++iti)
    {
      for (ChannelList::const_iterator itchan = chanset.begin(); itchan != chanset.end(); ++itchan)
      {
        if ((*itchan)->sourceId == (*iti)->sourceId && ( (*iti)->mplexId == 0 || (*iti)->mplexId == (*itchan)->mplexId ))
        {
          preferredCards.insert(std::make_pair((*iti)->liveTVOrder, std::make_pair(*iti, *itchan)));
          DBG(MYTH_DBG_DEBUG, "%s: [%u] channel=%s(%" PRIu32 ") card=%" PRIu32 " input=%s(%" PRIu32 ") mplex=%" PRIu32 " source=%" PRIu32 "\n",
                  __FUNCTION__, (*iti)->liveTVOrder, (*itchan)->callSign.c_str(), (*itchan)->chanId,
                  (*iti)->cardId, (*iti)->inputName.c_str(), (*iti)->inputId, (*iti)->mplexId, (*iti)->sourceId);
          break;
        }
      }
    }
  }
  return preferredCards;
}
예제 #2
0
void CBouquetManager::makeRemainingChannelsBouquet(void)
{
	ChannelList unusedChannels;
	set<t_channel_id> chans_processed;

	for (vector<CBouquet*>::const_iterator it = Bouquets.begin(); it != Bouquets.end(); ++it)
	{
		for (vector<CZapitChannel*>::iterator jt = (*it)->tvChannels.begin(); jt != (*it)->tvChannels.end(); ++jt)
			chans_processed.insert((*jt)->getChannelID());
		for (vector<CZapitChannel*>::iterator jt = (*it) ->radioChannels.begin(); jt != (*it)->radioChannels.end(); ++jt)
			chans_processed.insert((*jt)->getChannelID());
	}

	// TODO: use locales
	remainChannels = addBouquet(Bouquets.empty() ? "Alle Kan\xC3\xA4le" : "Andere"); // UTF-8 encoded

	for (tallchans::iterator it = allchans.begin(); it != allchans.end(); ++it)
		if (chans_processed.find(it->first) == chans_processed.end())
			unusedChannels.push_back(&(it->second));

	sort(unusedChannels.begin(), unusedChannels.end(), CmpChannelByChName());

	for (ChannelList::const_iterator it = unusedChannels.begin(); it != unusedChannels.end(); ++it)
		remainChannels->addService(findChannelByChannelID((*it)->getChannelID()));

	if ((remainChannels->tvChannels.empty()) && (remainChannels->radioChannels.empty()))
	{
		deleteBouquet(remainChannels);
		remainChannels = NULL;
	}
}
예제 #3
0
ChannelList Chat::getChannelList(Player* player)
{
	ChannelList list;
	NormalChannelMap::iterator itn;
	PrivateChannelMap::iterator it;
	bool gotPrivate = false;
		
	// If has guild
	if(player->getGuildId() && player->getGuildName().length()){
		ChatChannel *channel = getChannel(player, 0x00);
		if(channel)
			list.push_back(channel);
		else if((channel = createChannel(player, 0x00)))
			list.push_back(channel);
	}
				
	for(itn = m_normalChannels.begin(); itn != m_normalChannels.end(); ++itn){
		if(itn->first == 0x03 && !player->hasFlag(PlayerFlag_CanAnswerRuleViolations)){ //Rule violations channel
		    continue;
        }
        
	    ChatChannel *channel = itn->second;
		list.push_back(channel);
	}
	
	for(it = m_privateChannels.begin(); it != m_privateChannels.end(); ++it){
		PrivateChatChannel* channel = it->second;
		
		if(channel){
			if(channel->isInvited(player))
				list.push_back(channel);
				
			if(channel->getOwner() == player->getGUID())
				gotPrivate = true;
		}
	}
	
	if(!gotPrivate)
		list.push_front(dummyPrivate);
	
	return list;
}
예제 #4
0
ChannelList Chat::getPublicChannels() const
{
	ChannelList list;
	for(NormalChannelMap::const_iterator it = m_normalChannels.begin(); it != m_normalChannels.end(); ++it)
	{
		if(isPublicChannel(it->first))
			list.push_back(it->second);
	}

	return list;
}
예제 #5
0
SensorDataSet SensorDB::ExecuteSQL_SelectFromSensorDataTable(std::string sqlcommand)
{
    SensorDataSet ds;
	ChannelList channelist;
    int channel_num;
    int datatype_id;
    int operator_id;
    int device_id;
    int position_id;
    int activity_id;
    int activitybeginframe_id;
    int activityendframe_id;
    double samplerate;
    QDateTime createtime;
    if(db.isOpen()){
        QSqlQuery query;
        QString sqlcmd = string2qstring(sqlcommand);
        if(query.exec(sqlcmd)){
                while(query.next()){
					datatype_id = query.value("DataTypeID").toInt();
                    activity_id = query.value("ActivityID").toInt();
                    device_id = query.value("DeviceID").toInt();
                    operator_id = query.value("OperatorID").toInt();
                    position_id = query.value("PositionID").toInt();
                    activitybeginframe_id = query.value("ActivityBeginFrameID").toInt();
                    activityendframe_id = query.value("ActivityEndFrameID").toInt();
                    samplerate = query.value("SampleRate").toDouble();
                    createtime = query.value("CreateTime").toDateTime();
					channel_num = query.value("TotalChannelNum").toInt();
					channelist.clear();
					for(int i=1;i<=channel_num;i++){
                        if(query.value(i).isNull()){
                            break;
                        }					
						string ch = "channel_"+int2string(i);						
						//qDebug() << query.value(string2qstring(ch.c_str())).toString();
						channelist.push_back(Channel(query.value(string2qstring(ch.c_str())).toString().toStdString()));
						//qDebug() << string2qstring((channelist[channelist.size()-1].ToString()));
					}
					ds.PushBackSensorData(SensorData(channelist,channel_num,datatype_id,operator_id,device_id,position_id,
                                         activity_id,activitybeginframe_id,activityendframe_id, samplerate,createtime));
                }
        }
        else{
            qDebug()<<query.lastError();
        }
    }
    else{
        qDebug()<<"DataBase is not opened";
    }
    return ds;
}
예제 #6
0
ChannelList Chat::getChannelList(Player* player)
{
	ChannelList list;
	if(!player || player->isRemoved())
		return list;

	ChatChannel* channel = NULL;
	if(player->getParty() && ((channel = getChannel(player, CHANNEL_PARTY)) || (channel = createChannel(player, CHANNEL_PARTY))))
		list.push_back(channel);

	if(player->getGuildId() && player->getGuildName().length() && ((channel = getChannel(
		player, CHANNEL_GUILD)) || (channel = createChannel(player, CHANNEL_GUILD))))
		list.push_back(channel);

	for(NormalChannelMap::iterator it = m_normalChannels.begin(); it != m_normalChannels.end(); ++it)
	{
		if((channel = getChannel(player, it->first)))
			list.push_back(it->second);
	}

	bool hasPrivate = false;
	PrivateChatChannel* privChannel = NULL;
	for(PrivateChannelMap::iterator pit = m_privateChannels.begin(); pit != m_privateChannels.end(); ++pit)
	{
		if(!(privChannel = pit->second))
			continue;

		if(privChannel->isInvited(player))
			list.push_back(privChannel);

		if(privChannel->getOwner() == player->getGUID())
			hasPrivate = true;
	}

	if(!hasPrivate && player->isPremium())
		list.push_front(dummyPrivate);

	return list;
}
예제 #7
0
void EPoller::fillChannelEvents(int num, ChannelList& activeChannel)
{
	if(num > _events.size())
	{
		return;
	}

	LOGGER_STREAM(Logger::getLogger(LOGGER_NAME)) << "fillChannelEvents:" << "nums = " << num << "\n";

	for(int i=0; i<num; i++)
	{
		Channel* pChannel = static_cast<Channel*>(_events[i].data.ptr);
		pChannel->setRevent(_events[i].events);
		activeChannel.push_back(pChannel);
	}
}
예제 #8
0
ChannelList Chat::getChannelList(Player* player)
{
  ChannelList list;
  NormalChannelMap::iterator itn;
  PrivateChannelMap::iterator it;
  bool gotPrivate = false;

  // If has guild
  if(player->getGuildId() && player->getGuildName().length()){
    ChatChannel *channel = getChannel(player, CHANNEL_GUILD);

    if(channel)
      list.push_back(channel);
    else if((channel = createChannel(player, CHANNEL_GUILD)))
      list.push_back(channel);
  }

  if(player->getParty()){
    ChatChannel *channel = getChannel(player, CHANNEL_PARTY);

    if(channel)
      list.push_back(channel);
    else if((channel = createChannel(player, CHANNEL_PARTY)))
      list.push_back(channel);
  }

  for(itn = m_normalChannels.begin(); itn != m_normalChannels.end(); ++itn){
    if(!player->hasFlag(PlayerFlag_CannotBeMuted)){
      if(itn->first == CHANNEL_TRADE && player->getVocationId() == 0)
        continue;
      if(itn->first == CHANNEL_TRADE_ROOK && player->getVocationId() != 0)
        continue;
    }

    ChatChannel *channel = itn->second;
    list.push_back(channel);
  }

  for(it = m_privateChannels.begin(); it != m_privateChannels.end(); ++it){
    PrivateChatChannel* channel = it->second;

    if(channel){
      if(channel->isInvited(player))
        list.push_back(channel);

      if(channel->getOwner() == player->getGUID())
        gotPrivate = true;
    }
  }

  if(!gotPrivate)
    list.push_front(dummyPrivate);

  return list;
}
예제 #9
0
ChannelList Chat::getChannelList(const Player& player)
{
	ChannelList list;
	if (player.getGuild()) {
		ChatChannel* channel = getChannel(player, CHANNEL_GUILD);
		if (channel) {
			list.push_back(channel);
		} else {
			channel = createChannel(player, CHANNEL_GUILD);
			if (channel) {
				list.push_back(channel);
			}
		}
	}

	if (player.getParty()) {
		ChatChannel* channel = getChannel(player, CHANNEL_PARTY);
		if (channel) {
			list.push_back(channel);
		} else {
			channel = createChannel(player, CHANNEL_PARTY);
			if (channel) {
				list.push_back(channel);
			}
		}
	}

	for (const auto& it : normalChannels) {
		ChatChannel* channel = getChannel(player, it.first);
		if (channel) {
			list.push_back(channel);
		}
	}

	bool hasPrivate = false;
	for (const auto& it : privateChannels) {
		if (PrivateChatChannel* channel = it.second) {
			uint32_t guid = player.getGUID();
			if (channel->isInvited(guid)) {
				list.push_back(channel);
			}

			if (channel->getOwner() == guid) {
				hasPrivate = true;
			}
		}
	}

	if (!hasPrivate && player.isPremium()) {
		list.push_front(dummyPrivate);
	}
	return list;
}
예제 #10
0
ChannelList Chat::getChannelList(Player* player)
{
	ChannelList list;

	if (player->getGuild()) {
		ChatChannel* channel = getChannel(player, CHANNEL_GUILD);
		if (channel) {
			list.push_back(channel);
		} else {
			channel = createChannel(player, CHANNEL_GUILD);
			if (channel) {
				list.push_back(channel);
			}
		}
	}

	if (player->getParty()) {
		ChatChannel* channel = getChannel(player, CHANNEL_PARTY);
		if (channel) {
			list.push_back(channel);
		} else {
			channel = createChannel(player, CHANNEL_PARTY);
			if (channel) {
				list.push_back(channel);
			}
		}
	}

	for (NormalChannelMap::iterator it = m_normalChannels.begin(); it != m_normalChannels.end(); ++it) {
		ChatChannel* channel = getChannel(player, it->first);
		if (channel) {
			list.push_back(it->second);
		}
	}

	bool hasPrivate = false;
	for (PrivateChannelMap::iterator pit = m_privateChannels.begin(); pit != m_privateChannels.end(); ++pit) {
		if (PrivateChatChannel* channel = pit->second) {
			if (channel->isInvited(player)) {
				list.push_back(channel);
			}

			if (channel->getOwner() == player->getGUID()) {
				hasPrivate = true;
			}
		}
	}

	if (!hasPrivate && player->isPremium()) {
		list.push_front(dummyPrivate);
	}
	return list;
}
예제 #11
0
void EpollPoller::fireActiveChannels(int numEvents, ChannelList& activeChannels) const
{
    assert(static_cast<size_t>(numEvents) <= events_.size());
    for (int i = 0; i < numEvents; ++i)
    {
        Channel *channel = static_cast<Channel*>(events_[i].data.ptr);
        assert(hasChannel(channel) && "the channel must be already exist");
        
        //channel->set_revents(events_[i].events);
        int revents = FDEVENT_NONE;
        if (events_[i].events & EPOLLIN)    revents |= FDEVENT_IN;
        if (events_[i].events & EPOLLPRI)   revents |= FDEVENT_PRI;
        if (events_[i].events & EPOLLOUT)   revents |= FDEVENT_OUT;
        if (events_[i].events & EPOLLERR)   revents |= FDEVENT_ERR;
        if (events_[i].events & EPOLLHUP)   revents |= FDEVENT_HUP;
        channel->set_revents(revents);

        activeChannels.push_back(channel);
    }
}
예제 #12
0
void FdEventsKqueuer::fireActiveChannels(int numEvents, ChannelList& fdevents) const
{
    assert(static_cast<size_t>(numEvents) <= events_.size());
    for (int i = 0; i < numEvents; ++i)
    {
        //int fd = events_[i].ident;
        FdEvent *fde = static_cast<FdEvent*>(events_[i].udata);
        assert(hasChannel(fde) && "the channel must be already exist");

        int revents = FDEVENT_NONE;
        if (events_[i].events & EVFILT_READ)     revents |= FDEVENT_IN;
        if (events_[i].events & EVFILT_WRITE)    revents |= FDEVENT_OUT;
        if (events_[i].flags & EV_EOF)           revents |= FDEVENT_HUP;
        if (events_[i].flags & EV_ERROR)         revents |= FDEVENT_ERR;

        fde->set_revents(revents);

        fdevents.push_back(fde);
    }
}
SensorDataSet LoadData(string filepath){
	ifstream in(filepath);
	string in_str="";
	SensorDataSet sds;
	while(std::getline(in,in_str)){
		if(!in_str.empty()){
			QString qstr = string2qstring(in_str);
			QStringList qlist = qstr.split('\t');
			ChannelList cl;
			int channelnum = qlist[7].toInt();
			for (int i = 0; i <channelnum; i++)
			{
				cl.push_back(Channel(qlist[10+i].toStdString()));
			}
			sds.PushBackSensorData(SensorData(cl,channelnum,qlist[0].toInt(),qlist[3].toInt(),qlist[2].toInt(),qlist[4].toInt(),qlist[1].toInt(),qlist[8].toInt(),qlist[9].toInt(),qlist[5].toDouble(),QDateTime::fromString(qlist[6],"yyyy-MM-dd hh:mm:ss")));
		}
	}
	in.close();
	return sds;
}
예제 #14
0
void PollPoller::fireActiveChannels(int numEvents, ChannelList& activeChannels) const
{
    for (PollFdList::const_iterator it = pollfds_.begin(); numEvents > 0 && it != pollfds_.end() ; ++it)
    {
        if (it->revents > 0)
        {
            --numEvents;
            Channel *channel = getChannel(it->fd);
            assert(channel && "the channel must be already exist");
			//channel->set_revents(it->revents);
			int revents = FDEVENT_NONE;
			if (it->revents & POLLIN)    revents |= FDEVENT_IN;
			if (it->revents & POLLPRI)   revents |= FDEVENT_PRI;
			if (it->revents & POLLOUT)   revents |= FDEVENT_OUT;
			if (it->revents & POLLERR)   revents |= FDEVENT_ERR;
			if (it->revents & POLLHUP)   revents |= FDEVENT_HUP;
			if (it->revents & POLLNVAL)  revents |= FDEVENT_NVAL;  // never happen
			channel->set_revents(revents);
            
			activeChannels.push_back(channel);
            //LOG_INFO("PollPoller::fireActiveChannels [%d][%d]", it->fd, it->revents);
        }
    }
}
예제 #15
0
bool LiveTVPlayback::SpawnLiveTV(const ChannelPtr& thisChannel)
{
  ChannelList list;
  list.push_back(thisChannel);
  return SpawnLiveTV(thisChannel->chanNum, list);
}