/*
 public Telegram (String keyword, String type, string key)
 {
     // Standard-Konstruktor
     this._key = key;
     this._keyword = keyword;
     this._type = type;
     this._parameters = new List<string>();
 }
 */
 public Telegram(Telegram t, string key)
 {
     // Dieser Konstruktor erzeugt anhand von t ein Empfangs-Bestätigungs-Telegram
     this._key = key;
     //this._keyword = "ACKNOWLEDGE";
     this._type = Telegram.ACKNOWLEDGE;
     //this._parameters = new List<string>();
     //this._parameters.Add(t.key);
     this.acknowledgeKey = key;
 }
        public void SendTelegram(Telegram t)
        {
            // TODO Gesendete Telegramme müssen in einer Tabelle zwischengespeichert werden
            // damit bei Bedarf das Telegram erneut gesendet wird. Erst wenn das Telegram
            // vom Server bestätigt worden ist wird das Telegramm aus der Tabelle entfernt.
            // Das Telegramm wird solange erneut gesendet bis die Bestätigung beim Client
            // verarbeitet wurde
            // Sollte ein Telegram just in dem Augenblick erneut zum Server gesendet werden
            // wenn die Bestätigung ankommt muss der Server entsprechend reagieren (Telegramm Ignorieren oder so ähnlich)
            string tmp = t.ToString();
            if(!t.keyWord.Equals("ACKNOWLEDGE"))
                this._telegramtable.addRow(t.key, DateTime.Now, "skey", tmp);

            this.SendPreparedTelegram(tmp, t.key);
        }
        public static Telegram getResponse(string key, string req_id, params string[] parameters)
        {
            Telegram t = new Telegram();
            t._type = Telegram.RESPONSE;
            t._key = key;
            t._requestKey = req_id;
            t._acknowledgeKey = null;
            t._connectorkey = null;
            t._connectorcommand = null;

            for(int i=0; i<=parameters.Length-1; i++)
            {
                t.addParameter(parameters[i]);
            }

            return t;
        }
        public static Telegram getResponse(string key, string req_id)
        {
            Telegram t = new Telegram();
            t._type = Telegram.RESPONSE;
            t._key = key;
            t._requestKey = req_id;
            t._acknowledgeKey = null;
            t._connectorkey = null;
            t._connectorcommand = null;

            return t;
        }
        public static Telegram getRequest(string key, string keyword, params string[] parameters)
        {
            Telegram t = new Telegram();
            t._type = Telegram.REQUEST;
            t._key = key;
            t._keyword = keyword;
            t._requestKey = null;
            t._acknowledgeKey = null;
            t._connectorkey = null;
            t._connectorcommand = null;

            // TODO geht das auch iwie effizienter?
            for(int i=0; i<=parameters.Length-1; i++)
            {
                //t._parameters.Add(parameters[i]);
                t.addParameter(parameters[i]);
            }
            return t;
        }
        public static Telegram getRequest(string key, string keyword)
        {
            Telegram t = new Telegram();
            t._type = Telegram.REQUEST;
            t._key = key;
            t._keyword = keyword;
            t._requestKey = null;
            t._acknowledgeKey = null;
            t._connectorkey = null;
            t._connectorcommand = null;

            return t;
        }
        public static Telegram getConnector(string key, ulong conid, string cmd)
        {
            Telegram t = new Telegram();
            t._type = Telegram.CONNECTOR;
            t._keyword = "CONNECTOR";
            t._key = key;
            t._requestKey = null;
            t._acknowledgeKey = null;
            t._connectorkey = conid.ToString();
            t._connectorcommand = cmd;

            return t;
        }
        public static Telegram getConnector(string key, ulong conid, string cmd, params string[] parameters)
        {
            Telegram t = new Telegram();
            t._type = Telegram.CONNECTOR;
            t._keyword = "CONNECTOR";
            t._key = key;
            t._requestKey = null;
            t._acknowledgeKey = null;
            t._connectorkey = conid.ToString();
            t._connectorcommand = cmd;

            for (int i=0; i<=parameters.Length-1; i++)
            {
                t.addParameter(parameters[i]);
            }

            return t;
        }
        public static Telegram getAcknowledge(string key, string tid)
        {
            Telegram t = new Telegram();
            t._type = Telegram.ACKNOWLEDGE;
            t._key = key;
            t._acknowledgeKey = tid;
            t._connectorcommand = null;
            t._connectorkey = null;
            t._requestKey = null;

            return t;
        }
 public void Broadcast(Telegram t)
 {
     foreach (Session s in this._sessions) {
         s.SendTelegram (t);
     }
 }
        public void Start()
        {
            String commandLine = null;
            String numBytes = null;
            byte[] tmpbyte = new Byte[1];
            byte b = byte.Parse ("59");
            this._threadstarted = true;

            while (this._threadstarted) {
                if (this._stream.DataAvailable) {
                    commandLine = null;

                    tmpbyte = new Byte[1];
                    while (!tmpbyte[0].Equals(b)) {
                        // TODO Vorkehrungen treffen dass im Falle eines Falschen Telegrams (falsche oder fehlende byteanzahl keine endlos-schleife entsteht)
                        this._stream.Read (tmpbyte, 0, tmpbyte.Length);
                        numBytes += Encoding.ASCII.GetString (tmpbyte);
                    }

                    int i = Int16.Parse (numBytes.Substring (0, numBytes.Length - 1));

                    for (int j=0; j<=i-1; j++) {
                        this._stream.Read (tmpbyte, 0, tmpbyte.Length);
                        commandLine += Encoding.ASCII.GetString (tmpbyte);
                    }

                    //this.l.writeTelegramToFile (numBytes + commandLine, true);
                    Telegram t = Telegram.Parse (numBytes + commandLine);
                    if (!t.keyWord.Equals ("ACKNOWLEDGE")) {
                        // Bestätigung des Empfangs des Telegrams versenden (aber nur wenn das empfange Telegramm kein ACKNOWLEDGE ist
                        Telegram tt = new Telegram (t, this._vm.StringKey);
                        this.SendTelegram (tt);
                        this._telegramqueue.Enqueue (t);
                    } else {
                        this._telegramtable.deleteRow ("id", t [0]);
                    }
                    numBytes = null;
                }
            }
        }
Exemple #12
0
 public void SendTelegram(Telegram t)
 {
     this._com.SendTelegram (t);
 }