Immer noch geht es um die Linked Prims, aber möglicherweise fangen wir gerade erst an, wollen also nicht so lamentieren zu Beginn ;).
Um das Logging zum Einsatz zu bringen waren noch zwei Includes (using bei c#) notwendig und das Anlegen einer statischen Variable. Erstes Modul auf das ich mich stürze ist MySQLRegionData.cs in Region/Framework/Scenes. Kein Erfolg ist feststellbar dass das Loggen irgendein hilfreiches Protokoll bringt. Die else-Zweige bei der Prozedur StoreObject die beschritten werden wenn kein „persistent“ gegeben ist das zum Speichern führen soll werden entkommentiert und mit Leben gefüllt, aber nichts zu bemerken. Es kommen aber schon interessante Erkenntnisse darüber was da wann geschieht, der eine else-Zweig dient nämlich dazu im Modus „selected“ noch nicht zu speichern, klingt vernünftig. Auch Anpassungen im neuen MySQLLegacyRegionData.cs – das in der 0.6.6er noch gar nicht vorhanden war – bringen nichts.
Der nächste Bereich ist, dass ständig – und zwar im 20-Sekunden-Abstand – von diesem Modul versucht wird auf Speicherfähigkeit zu prüfen, ehrlich gesagt halte ich die Last die hier erzeugt wird für ziemlich schlecht. Man merkt das ja gar nicht da im else-Zweig keine Ausgabe erfolgt, mit den debugging-Infos kommt alle paar Sekunden – und das schon für nur 3 Prims „did not update persistance“. Der interessante Punkt ist der, dass nur gespeichert wird wenn „HasGroupChanged“ wahr ist. Ich suche eine Art „HasPositionChanged“ das aber nicht aufzutreiben ist.
In der 0.6.9er wird das in Vorgängerversionen verwendete Setzen von HasGroupChanged an etlichen Stellen auskommentiert. Da mir das verdächtig erscheint nehme ich es mal wieder rein, jedoch ohne dass dies Auswirkungen auf das Speichern von Links hätte.
Nach einigen Tests bekomme ich schließlich eine Erleuchtung: Wir suchen ja einen Trigger der ausgelöst wird noch bevor überhaupt in den Speicherbereich eingestiegen wird, denn selbst VOR dem Speichern müsste ein Wechsel vom Fokus beim Select ja schon das Erhaltenbleiben des Links signalisieren, was definitiv nicht geschieht. Bisher also die komplett falsche Baustelle – die aber einige nette Erkenntnisse gebracht hat die wir sicherlich irgendwann gebrauchen können 😉
Mit vollständig neuer Herangehensweise steige ich in den ClientStack ein, nach einiger Suche werde ich fündig: Es gibt einen LinkHandler neben etlichen anderen – nämlich für all das was im Client ausgelöst werden soll – in LLClientView.cs im Bereich Region/ClientStack/LindenUDP. Und Heureka: Dort ein Logging eingebaut bringt sofort nach dem versuchten Linken eine Protokoll-Meldung auf der Konsole: Ich habe soeben den Hebel an der richtigen Stelle angesetzt.