예제 #1
0
    // 해당 기대에 대하여 메모리스트림에 루적된 자료를 얻어내고 그 메모리스트림을 삭제한다.
    protected int GetBlockDataAndRemove(string asDevId, out byte[] abytBlkData)
    {
        abytBlkData = new byte[0];

        if (asDevId.Length == 0)
        {
            return(-1);
        }

        try
        {
            string app_key;

            Context.Application.Lock();
            app_key = "key_dev_" + asDevId;

            FKWebTransBlockData app_val_blk = (FKWebTransBlockData)Context.Application.Get(app_key);
            if (app_val_blk == null)
            {
                Context.Application.UnLock();
                return(0);
            }

            app_val_blk.MemStream.Seek(0, SeekOrigin.Begin);
            abytBlkData = new byte[app_val_blk.MemStream.Length];
            app_val_blk.MemStream.Read(abytBlkData, 0, abytBlkData.Length);
            Context.Application.Remove(app_key);

            Context.Application.UnLock();
            return(0);
        }
        catch
        {
            Context.Application.UnLock();
            return(-11);
        }
    }
예제 #2
0
    // 지령수행결과로 올라오는 블로크자료들을 기대별로 할당한 메모리스트림에 추가한다.
    protected int AddBlockData(string asDevId, int anBlkNo, byte [] abytBlkData)
    {
        if (asDevId.Length == 0)
        {
            return(-1); // -1 : 파라메터가 비정상
        }
        if (anBlkNo < 1)
        {
            return(-1);
        }

        if (abytBlkData.Length == 0)
        {
            return(-1);
        }

        try
        {
            string app_key;

            Context.Application.Lock();
            app_key = "key_dev_" + asDevId;

            if (anBlkNo == 1)
            {
                FKWebTransBlockData app_val_blk = (FKWebTransBlockData)Context.Application.Get(app_key);
                if (app_val_blk == null)
                {
                    // 이전에 해당 기대에 대한 블로크자료를 루적하기 위한 오브젝트가 창조되여 있지 않은 경우
                    //  새 오브젝트를 창조하고 Dictionary에 추가한다.
                    app_val_blk = new FKWebTransBlockData();
                    Context.Application.Add(app_key, app_val_blk);
                }
                else
                {
                    // 이전에 해당 기대에 대한 블로크자료를 루적하기 위한 오브젝트가 창조되여 있은 경우
                    //  그 오브젝트를 삭제하고 새 오브젝트를 창조한 다음 Dictionary에 추가한다.
                    Context.Application.Remove(app_key);
                    app_val_blk = new FKWebTransBlockData();
                    Context.Application.Add(app_key, app_val_blk);
                }

                // 첫 블로크자료를 블로크자료보관용 스트림에 추가한다.
                app_val_blk.LastBlockNo    = 1;
                app_val_blk.TmLastModified = DateTime.Now;
                app_val_blk.MemStream      = new MemoryStream();
                app_val_blk.MemStream.Write(abytBlkData, 0, abytBlkData.Length);
            }
            else
            {
                // 블로크번호가 1 이 아닌 경우
                FKWebTransBlockData app_val_blk = (FKWebTransBlockData)Context.Application.Get(app_key);
                if (app_val_blk == null)
                {
                    // 이미 기대에 대한 오브젝트가 창조되여 있지 않은 상태라면
                    Context.Application.UnLock();
                    return(-2);
                }
                if (app_val_blk.LastBlockNo != anBlkNo - 1)
                {
                    // 만일 마지막으로 받은 블로크번호가 새로 받을 블로크번호와 련속이 되지 않는다면
                    Context.Application.UnLock();
                    return(-3);
                }

                // 새로 받은 블로크자료를 블로크자료보관용 스트림의 마지막에 추가한다.
                app_val_blk.LastBlockNo    = anBlkNo;
                app_val_blk.TmLastModified = DateTime.Now;
                app_val_blk.MemStream.Seek(0, SeekOrigin.End);
                app_val_blk.MemStream.Write(abytBlkData, 0, abytBlkData.Length);
            }

            Context.Application.UnLock();
            return(0);
        }
        catch
        {
            Context.Application.UnLock();
            return(-11);
        }
    }