// 해당 기대에 대하여 메모리스트림에 루적된 자료를 얻어내고 그 메모리스트림을 삭제한다. 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); } }
// 지령수행결과로 올라오는 블로크자료들을 기대별로 할당한 메모리스트림에 추가한다. 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); } }