/*
 
 ArdOSC 2.1 - OSC Library for Arduino.
 
 -------- Lisence -----------------------------------------------------------
 
 ArdOSC
 
 The MIT License
 
 Copyright (c) 2009 - 2011 recotana( http://recotana.com ) All right reserved
 
 */

#include <stdlib.h>
#include <string.h>
#include "OSCServer.h"
#include "OSCcommon.h"
#include "OSCMessage.h"

#include "Pattern.h"



Pattern::Pattern(){
    patternNum=0;
	sinkNum=0;

}
Pattern::~Pattern(){    
}

void Pattern::addOscAddress(char *_adr ,  AdrFunc _func){
    adrFunc[patternNum] = _func;
    addr[patternNum] = _adr;
    patternNum++;
}

void Pattern::addOscMessageSink(OscMessageSink* sink ){
	sinks[sinkNum]=sink;
	sinkNum++;
}

void Pattern::execFunc(uint8_t _index,OSCMessage *_mes){
    adrFunc[_index](_mes);
}

void Pattern::paternComp(OSCMessage *_mes){
/*
	Serial.print("got message, adress:_");
    Serial.print(_mes->_oscAddress );
		Serial.println("_");
		*/
    for (uint8_t i=0 ; i<patternNum ; i++) {
        if ( strcmp( addr[i] , _mes->_oscAddress ) == 0 ) execFunc( i , _mes );
    }
	
	for (uint8_t i=0 ; i<sinkNum ; i++) {
	/*
		Serial.print("sending message to sink: _");
		Serial.print(sinks[i]-> getAdress());
		Serial.print("_: ");
		//Serial.println("triggering sink");
		*/
		sinks[i]->digestMessage(_mes);

    }
}