Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Universalschnittstelle?
#6
@Michelle
Das wäre natürlich die optimale Lösung ! Big Grin
Aber so weit reicht mein Ehrgeiz heute nicht mehr. - Werde auch zu alt für den Sche.. Undecided
Von der knapp bemessenen Freizeit mal ganz abgesehen müssten die Devs es dann auch übernehmen, sonst wäre es ziemlich sinnlos.


Hier kommt jedenfalls mein Gebastel. Smile
Da ich kein Windows habe, kann ich mich nur auf Linux beziehen. Aber bei Windows sollte es recht ähnlich sein – hoffe ich mal …. Smile
Zunächst braucht man die Quellen von:
http://opensimulator.org/wiki/Main_Page

Die Installation und das Compilieren ist hier beschrieben....
http://opensimulator.org/wiki/Build_Instructions

...und wo und wie man eigene Funktionen einbaut, hier:
http://opensimulator.org/wiki/OSSL

Analog zu dieser Beschreibung muss
Code:
string osMessageRead (int kanal);
int osMessageWrite (int kanal,string message);
in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs

dann..
Code:
public string osMessageRead(int kanal)
        {
            return m_OSSL_Functions.osMessageRead(kanal);
        }
        
        public int osMessageWrite(int kanal,string message)
        {
        return m_OSSL_Functions.osMessageWrite(kanal,message);
        }
...in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs

und letztlich..
Code:
public string osMessageRead (int kanal)
        {
        CheckThreatLevel(ThreatLevel.VeryHigh, "osMessageRead");

        m_host.AddScriptLPS(1);
        string verzeichnis ="./tmpMessage/";    // /bin/tmpMessage
        int maxmessage = 10;            // Maximale Datei-/Kanalnummer    
        
        if (kanal < 0 || kanal > maxmessage)
        {
          return "";
        }
        string theXFiles =verzeichnis+kanal.ToString();
        StreamReader file = File.OpenText(theXFiles);
        string s = file.ReadToEnd();
        file.Close();
        
        StreamWriter writer = new StreamWriter(theXFiles);
        writer.Write("");
        writer.Close();
        
        return s;
        }

        
        
        public int osMessageWrite (int kanal,string message)
        {
        CheckThreatLevel(ThreatLevel.VeryHigh, "osMessageWrite");

        m_host.AddScriptLPS(1);
        string verzeichnis ="./tmpMessage/";    // /bin/tmpMessage
        int maxmessage = 10;            // Maximale Datei-/Kanalnummer
        if (kanal < 0 || kanal > maxmessage)  
        {
          return -1;
        }
      
      
        string theXFiles =verzeichnis+kanal.ToString();
      
        StreamWriter writer = new StreamWriter(theXFiles);
        writer.Write(message);
      
        writer.Close();
        return 0;
        }
...in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs

Das ganze ist keine Rundum-Sorglos-Eierlegende Wollmilchsau, sondern eher eine Basis für eigene Experimente.
Geschrieben und gelesen wird nur in einem vorgegebenen Verzeichnis. In diesem Fall /tmpMessage ,was man sich unter /bin anlegen muss. - Man kann aber natürlich auch ein beliebiges anderes Laufwerk/Verzeichnis eintragen. Als Dateinamen werden die Kanalnummern verwendet, die ich in den Funktionen auf 0- 10 begrenzt habe. Die muss man sich ggf. so hoch setzen wie man sie braucht.
Es funktioniert Regionsübergreifend, Gridweit, kann also auch zur Kommunikation zwischen einzelnen Regionen genutzt werden. Wenn es jemand auf Regionsweite beschränkt benötigt, muss noch die UUID der Region mit zum Dateinamen genommen werden. (Falls das jemand so braucht, fummel ich es gerne rein). Und als Sicherheit habe ich (erstmal) die Paranoia Stufe gewählt. Smile

Hier kommt dann noch ein Scriptchen zum testen:
Code:
default
{
    state_entry()
    {
      //***************************************************************
      // Nur einmalig, damit die Dateien zum Auslesen vorhanden sind
      integer a;
      for(;a < 11; ++a) osMessageWrite(a,"");
      //***************************************************************
    
       llListen  (0,"",NULL_KEY,"");
      llSetTimerEvent(0.5);

    }

  listen(integer channel, string name, key id, string message)
  {
   osMessageWrite(0,message);
  }
  
  timer()
  {
  
   string message = osMessageRead(1);
    if (message != "")
    {
     llSay(0, message);
    }
  }
}

Das packt man sich in ein Objekt. Wenn man einen Satz chattet, kann man ihn mit einem Texteditor in der Datei /bin/tmpMessage/0 lesen. Wenn man einen Satz als Dateiname 1 im gleichen Verzeichnis speichert, wird dieser Inworld vom Objekt verkündet. - Ich denke einfacher geht’s nimmer... Smile
Ein Problem, was auftauchte, wenn man eine Datei liest, die noch nicht existiert, läuft das Script auf einen Fehler. Kann man natürlich in der C# Funktion abfangen, aber wenn sie einmal angelegt ist, ist das Überprüfen überflüssig und Ressourcen verschwendend. Ich lege daher im Script erst mal und einmalig die Dateien mit Leerstring an. Danach können diese Zeilen gelöscht werden
Degolburg:
24h online und ca. 10 % fertig
Taxi: 85.214.150.139:9000:Degolburg
Zitieren


Nachrichten in diesem Thema
Universalschnittstelle? - von MoniTill - 31.03.2016, 01:01
RE: Universalschnittstelle? - von Bogus Curry - 31.03.2016, 02:25
RE: Universalschnittstelle? - von MoniTill - 31.03.2016, 16:56
RE: Universalschnittstelle? - von MichelleArgus - 02.04.2016, 00:19
RE: Universalschnittstelle? - von MoniTill - 10.04.2016, 18:17
RE: Universalschnittstelle? - von Sheera Khan - 11.04.2016, 14:48
RE: Universalschnittstelle? - von Dorena Verne - 11.04.2016, 15:04
RE: Universalschnittstelle? - von MoniTill - 11.04.2016, 21:27
RE: Universalschnittstelle? - von Sheera Khan - 13.04.2016, 13:47
RE: Universalschnittstelle? - von Bogus Curry - 14.04.2016, 09:04
RE: Universalschnittstelle? - von Bogus Curry - 14.04.2016, 10:05
RE: Universalschnittstelle? - von MoniTill - 14.04.2016, 11:28
RE: Universalschnittstelle? - von Bogus Curry - 14.04.2016, 11:40
RE: Universalschnittstelle? - von MoniTill - 14.04.2016, 14:11
RE: Universalschnittstelle? - von Bogus Curry - 14.04.2016, 21:51
RE: Universalschnittstelle? - von MoniTill - 14.04.2016, 23:27
RE: Universalschnittstelle? - von MichelleArgus - 16.04.2016, 15:38
RE: Universalschnittstelle? - von Bogus Curry - 16.04.2016, 17:40
RE: Universalschnittstelle? - von MoniTill - 17.04.2016, 01:18
RE: Universalschnittstelle? - von Bogus Curry - 17.04.2016, 03:32
RE: Universalschnittstelle? - von MoniTill - 17.04.2016, 14:51
RE: Universalschnittstelle? - von Bogus Curry - 17.04.2016, 19:17

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste