示例#1
0
        public static int APPFrequency(Int64 Hwnd, List <HwndBuffer> hwndbuffer)
        {
            HwndBuffer b = Search(Hwnd, hwndbuffer);

            if (b != null)
            {
                return(b.Value());
            }
            else
            {                                   //még nincs a bufferben tároljuk el
                b = new HwndBuffer(Hwnd, hwndbuffer);
                return(b.counter);
            }
        }
示例#2
0
        public static int APPStep(Int64 Hwnd, List <HwndBuffer> hwndbuffer)   //amikor találunk korábbi eltárolt buffer adatot
        {
            HwndBuffer b = Search(Hwnd, hwndbuffer);

            if (b != null)
            {
                return(b.Increment());
            }
            else
            {                                   //még nincs a bufferben tároljuk el
                b = new HwndBuffer(Hwnd, hwndbuffer);
                return(b.counter);
            }
        }
示例#3
0
        // return kétbyte-os tömb első bájt a mód, második a letárolási index
        public byte[] indexOfBufferAndStore(string Owner, string hash, byte[] mem, Int64 Hwnd)
        {
            byte[]      ret = new byte[2];
            MediaBuffer buf = null, old = null;
            byte        oldi  = 0;
            int         index = -1;
            DateTime    olddt = DateTime.Now;

            store.WaitOne();
            byte cnt = (byte)SIBuffer.Count();

            for (byte i = 0; i < cnt; i++)
            {
                buf = SIBuffer[i];
                if (buf.owner.CompareTo(Owner) == 0)
                {
                    if (buf.hwnd.CompareTo(Hwnd) == 0)
                    {
                        index = i;
                    }                                           //Talált adatot az adott HWND-hez, azaz olyat ami nem egyezik de ehhet az ablakhoz köthető korábbi
                    if (buf.key.CompareTo(hash) == 0)
                    {
                        ret[0]      = VRMainContentExporter.VRCEShared.CONST_MODE_BFFOUND; ret[1] = i;
                        buf.created = DateTime.Now;             //még ha nem is kell tenni semmit sem.. az uptodate ez a frame lesz. Lekérdezés ez alapján működik legfrissebb = aktuális frame
                        buf.usage++;
                        HwndBuffer.APPStep(Hwnd, hwndbuffer);
                        store.Release();
                        return(ret);                             //Megtalálta a megfelelő buffer elemet, sem hozzádás, sem módosítás nem történt
                    }
                }
                if ((olddt > buf.created) || (buf.del))         //TODO BUF.DEL előkészülve ha lesz process ami kitölti...
                {
                    olddt = buf.created; old = buf; oldi = i;   //A legrégebbi buffer elem
                }
            }
            //új felvétele - ha idáig eljutottunk, akkor nem találtuk meg

            int freq = HwndBuffer.APPFrequency(Hwnd, hwndbuffer); // 1 érték azt jelenti minden alkalommal ha HWND adat jön az új, 2 azt jelenti minden második alkalommal új...

            if ((index < 0) || (cnt < 1) || (freq > 1))           // cnt=0 akkor ADD lesz (azaz üres a buffer),
                                                                  // index = vagy ha nincs a bufferben az ablakhoz régi elem. akkor sem lehet arra ráülni újra
                                                                  //
            {
                if (cnt >= CONST_MAXBUFF)
                {                                                                                 // ha tele a buffer akkor a legrégebbi törlése
                    MediaBuffer.Modify(old, Owner, hash, mem, Hwnd);
                    ret[0] = VRMainContentExporter.VRCEShared.CONST_MODE_BFMODIFY; ret[1] = oldi; // A legrégebbi buffer elemre hivatkozás módosításra
                    store.Release();
                    return(ret);
                }
                else
                {
                    SIBuffer.Add(new MediaBuffer(Owner, hash, mem, Hwnd));
                    SIX++;
                    ret[0] = VRMainContentExporter.VRCEShared.CONST_MODE_BFADD; ret[1] = (byte)(SIX - 1);   // Van még hely új elem részére felvesszük
                    store.Release();
                    return(ret);
                }
            }
            else
            {                                                   // A bufferben vannak elemek már,
                                                                // az adott ablakhoz tartozik már elem
                                                                // Az ismétlési freq (1) alacsony, azaz minden frame más és más és ezzel nem terheljük a buffert
                                                                // módosítjuk a gyorsan változó tartalmú ablak adatát a bufferben
                MediaBuffer.Modify(SIBuffer[index], Owner, hash, mem, Hwnd);
                ret[0] = VRMainContentExporter.VRCEShared.CONST_MODE_BFMODIFY; ret[1] = (byte)index;
                store.Release();
                return(ret);
            }
        }