Ich nutze für die Buffer __get und __set.
Aktuell auch 'etwas' böse, da theoretisch diese 'Eigenschaften' der Instanz public sind.
In diesen magischen Methoden wird beim setzen geprüft ob die Länge größer 8000 Byte sind und dann ein weiterer benutzt.
Die eventuelle negative Differenz an Buffern werden geleert.
Die Unterscheidung ob es ein einzelner oder eine Gruppe von Buffern sind, mache ich am Namen fest.
Alles was mit Multi_ beginnt sind ein Array von Buffer.
MichaelPHP-Code:
/**
* Trait welcher Objekt-Eigenschaften in den Instance-Buffer schreiben und lesen kann.
*/
trait BufferHelper
{
/**
* Wert einer Eigenschaft aus den InstanceBuffer lesen.
*
* @access public
* @param string $name Propertyname
* @return mixed Value of Name
*/
public function __get($name)
{
if (strpos($name, 'Multi_') === 0)
{
$Lines = "";
foreach ($this->{"BufferListe_" . $name} as $BufferIndex)
{
$Lines .= $this->{'Part_' . $name . $BufferIndex};
}
return unserialize($Lines);
}
return unserialize($this->GetBuffer($name));
}
/**
* Wert einer Eigenschaft in den InstanceBuffer schreiben.
*
* @access public
* @param string $name Propertyname
* @param mixed Value of Name
*/
public function __set($name, $value)
{
$Data = serialize($value);
if (strpos($name, 'Multi_') === 0)
{
$OldBuffers = $this->{"BufferListe_" . $name};
if ($OldBuffers == false)
$OldBuffers = array();
$Lines = str_split($Data, 8000);
foreach ($Lines as $BufferIndex => $BufferLine)
{
$this->{'Part_' . $name . $BufferIndex} = $BufferLine;
}
$NewBuffers = array_keys($Lines);
$this->{"BufferListe_" . $name} = $NewBuffers;
$DelBuffers = array_diff_key($OldBuffers, $NewBuffers);
foreach ($DelBuffers as $DelBuffer)
{
$this->{'Part_' . $name . $DelBuffer} = "";
}
return;
}
$this->SetBuffer($name, $Data);
}
}
/**
* @property Nodes $Multi_AllNodes
* @property string $Multi_String
*/
class PlugwiseNetwork extends IPSModule
{
use BufferHelper;
/**
* Interne Funktion des SDK.
*
* @access public
*/
public function Create()
{
parent::Create();
$this->Multi_AllNodes = new Nodes(); // Objekt
$this->Multi_String = "" ; // String
}
protected function YourFunction()
{
$Nodes = $this->Multi_AllNodes; // Objekt aus Buffer holen.
$this->Multi_String = '1234567865asdfghjgfd' // String in Buffer schreiben.
}
/* your code here */
}