mirror of
				https://github.com/ElvishArtisan/rivendell.git
				synced 2025-11-04 08:04:12 +01:00 
			
		
		
		
	* Replaced the 'Add Event', 'Delete Event' and 'Modify Event' commands in the RDCatch Monitor Protocol with multicast update events.
		
			
				
	
	
		
			233 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// rdnotification.cpp
 | 
						|
//
 | 
						|
// A container class for a Rivendell Notification message.
 | 
						|
//
 | 
						|
//   (C) Copyright 2018-2019 Fred Gleason <fredg@paravelsystems.com>
 | 
						|
//
 | 
						|
//   This program is free software; you can redistribute it and/or modify
 | 
						|
//   it under the terms of the GNU General Public License version 2 as
 | 
						|
//   published by the Free Software Foundation.
 | 
						|
//
 | 
						|
//   This program is distributed in the hope that it will be useful,
 | 
						|
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
//   GNU General Public License for more details.
 | 
						|
//
 | 
						|
//   You should have received a copy of the GNU General Public
 | 
						|
//   License along with this program; if not, write to the Free Software
 | 
						|
//   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
						|
//
 | 
						|
 | 
						|
#include <QStringList>
 | 
						|
 | 
						|
#include "rdnotification.h"
 | 
						|
 | 
						|
RDNotification::RDNotification(Type type,Action action,const QVariant &id)
 | 
						|
{
 | 
						|
  notify_type=type;
 | 
						|
  notify_action=action;
 | 
						|
  notify_id=id;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RDNotification::RDNotification()
 | 
						|
{
 | 
						|
  notify_type=RDNotification::NullType;
 | 
						|
  notify_action=RDNotification::NoAction;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RDNotification::Type RDNotification::type() const
 | 
						|
{
 | 
						|
  return notify_type;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDNotification::setType(RDNotification::Type type)
 | 
						|
{
 | 
						|
  notify_type=type;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RDNotification::Action RDNotification::action() const
 | 
						|
{
 | 
						|
  return notify_action;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDNotification::setAction(RDNotification::Action action)
 | 
						|
{
 | 
						|
  notify_action=action;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
QVariant RDNotification::id() const
 | 
						|
{
 | 
						|
  return notify_id;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDNotification::setId(const QVariant id)
 | 
						|
{
 | 
						|
  notify_id=id;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool RDNotification::isValid() const
 | 
						|
{
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool RDNotification::read(const QString &str)
 | 
						|
{
 | 
						|
  notify_type=RDNotification::NullType;
 | 
						|
  notify_action=RDNotification::NoAction;
 | 
						|
  notify_id=QVariant();
 | 
						|
 | 
						|
  QStringList args=str.split(" ");
 | 
						|
  if(args.size()==4) {
 | 
						|
    if(args[0]!="NOTIFY") {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    for(int i=0;i<RDNotification::LastType;i++) {
 | 
						|
      RDNotification::Type type=(RDNotification::Type)i;
 | 
						|
      if(args[1]==RDNotification::typeString(type)) {
 | 
						|
	notify_type=type;
 | 
						|
	switch(type) {
 | 
						|
	case RDNotification::CartType:
 | 
						|
	  notify_id=QVariant(args[3].toUInt());
 | 
						|
	  break;
 | 
						|
 | 
						|
	case RDNotification::LogType:
 | 
						|
	  notify_id=QVariant(args[3]);
 | 
						|
	  break;
 | 
						|
 | 
						|
	case RDNotification::PypadType:
 | 
						|
	  notify_id=QVariant(args[3].toUInt());
 | 
						|
	  break;
 | 
						|
 | 
						|
	case RDNotification::DropboxType:
 | 
						|
	  notify_id=QVariant(args[3]);
 | 
						|
	  break;
 | 
						|
 | 
						|
	case RDNotification::CatchEventType:
 | 
						|
	  notify_id=QVariant(args[3].toUInt());
 | 
						|
	  break;
 | 
						|
 | 
						|
	case RDNotification::NullType:
 | 
						|
	case RDNotification::LastType:
 | 
						|
	  break;
 | 
						|
	}
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if(notify_type==RDNotification::NullType) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    for(int i=0;i<RDNotification::LastAction;i++) {
 | 
						|
      RDNotification::Action action=(RDNotification::Action)i;
 | 
						|
      if(args[2]==RDNotification::actionString(action)) {
 | 
						|
	notify_action=action;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if(notify_action==RDNotification::NoAction) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
QString RDNotification::write() const
 | 
						|
{
 | 
						|
  QString ret="";
 | 
						|
 | 
						|
  ret+="NOTIFY ";
 | 
						|
  ret+=RDNotification::typeString(notify_type)+" ";
 | 
						|
  ret+=RDNotification::actionString(notify_action)+" ";
 | 
						|
  switch(notify_type) {
 | 
						|
  case RDNotification::CartType: 
 | 
						|
    ret+=QString().sprintf("%u",notify_id.toUInt());
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::LogType: 
 | 
						|
    ret+=notify_id.toString();
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::PypadType: 
 | 
						|
    ret+=QString().sprintf("%u",notify_id.toUInt());
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::DropboxType: 
 | 
						|
    ret+=notify_id.toString();
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::CatchEventType: 
 | 
						|
    ret+=QString().sprintf("%u",notify_id.toUInt());
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::NullType:
 | 
						|
  case RDNotification::LastType:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
QString RDNotification::typeString(RDNotification::Type type)
 | 
						|
{
 | 
						|
  QString ret="UNKNOWN";
 | 
						|
 | 
						|
  switch(type) {
 | 
						|
  case RDNotification::CartType:
 | 
						|
    ret="CART";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::LogType:
 | 
						|
    ret="LOG";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::PypadType:
 | 
						|
    ret="PYPAD";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::DropboxType:
 | 
						|
    ret="DROPBOX";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::CatchEventType:
 | 
						|
    ret="CATCH_EVENT";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::NullType:
 | 
						|
  case RDNotification::LastType:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
QString RDNotification::actionString(Action action)
 | 
						|
{
 | 
						|
  QString ret="UNKNOWN";
 | 
						|
 | 
						|
  switch(action) {
 | 
						|
  case RDNotification::AddAction:
 | 
						|
    ret="ADD";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::DeleteAction:
 | 
						|
    ret="DELETE";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::ModifyAction:
 | 
						|
    ret="MODIFY";
 | 
						|
    break;
 | 
						|
 | 
						|
  case RDNotification::NoAction:
 | 
						|
  case RDNotification::LastAction:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 |