/// <summary> /// Gets the correct BaseFile class by comparing the file with the known header signatures. /// </summary> /// <param name="filePath">Filepath</param> /// <returns></returns> public static BaseFile GetTypeFromFile(string filePath) { byte[] buffer; using (BinaryReader reader = new BinaryReader(new FileStream(filePath, FileMode.Open))) { if (reader.BaseStream.Length < 256) { buffer = new byte[reader.BaseStream.Length]; reader.Read(buffer, 0, buffer.Length); } else { buffer = new byte[256]; reader.Read(buffer, 0, 256); } } if (BG.Compare(buffer)) { return(new BGFile(filePath)); } if (LZB.Compare(buffer)) { return(new LZBFile(filePath)); } if (PACK.Compare(buffer)) { return(new PBFile(filePath)); } if (SEQ.Compare(buffer)) { return(new SEQFile(filePath)); } if (STR.Compare(filePath)) { return(new STRFile(filePath)); } if (TIM.Compare(buffer)) { return(new TIMFile(filePath)); } if (VB.Compare(buffer)) { return(new VBFile(filePath)); } if (VH.Compare(buffer)) { return(new VHFile(filePath)); } if (XA.Compare(filePath)) { return(new XAFile(filePath)); } return(new BaseFile(filePath)); }
// 串口发送线程 protected override void WriteThread(object state) { lock (WriteTimerLock) { byte[] WriteBytes; if (SerialChannel == SerialChannelEnum.ChipConnect) { WriteBytes = PACK.ReadyToWrite(); } else { lock (ShellCmdLock) { if (ShellCmdQueue.Count > 0 && (!ShellCmdQueue.Peek().IsSent)) { WriteBytes = ShellCmdQueue.Peek().CmdBytes; ShellCmdQueue.Peek().IsSent = true; } else { return; } } } try { if (serialport != null && serialport.IsOpen && WriteBytes.Length > 0) { serialport.Write(WriteBytes, 0, WriteBytes.Length); Log.debug("send: " + Tool.HexToString(WriteBytes, " ")); } } catch (Exception ex) { Log.error(ex.Message); Disconnect(); } } }
public override void Disconnect() { try { ClearCmd(); Cmd.Clear(); ReadTimer.Change(-1, -1); WriteTimer.Change(-1, -1); WaitUntilThreadOver(); serialport.Close(); CreateEvent(EventReason.Disconnected, null); } catch (Exception ex) { CreateEvent(EventReason.Disconnected, ex.Message); } finally { PACK.FlushReadBuffer(); PACK.FlushWriteBuffer(); CMD.ClearTask(); serialport = null; } }
public override void Connect(object device) { if (device is SerialPort) { IsUSBSerial = false; serialport = (SerialPort)device; try { serialport.DataBits = 8; serialport.StopBits = StopBits.One; serialport.Parity = Parity.None; serialport.ReadTimeout = 50; serialport.ReceivedBytesThreshold = 1; serialport.DataReceived += new SerialDataReceivedEventHandler(SerialReadThread); serialport.ReadBufferSize = 8192; serialport.WriteBufferSize = 8192; PACK.FlushReadBuffer(); PACK.FlushWriteBuffer(); CMD.ClearTask(); serialport.Open(); WriteTimer.Change(0, 25); ReadTimer.Change(0, 25); SerialChannel = SerialChannelEnum.ChipConnect; CreateEvent(EventReason.ChipConnected, null); // 仅串口连接成功 return; } catch (Exception ex) { Disconnect(); CreateEvent(EventReason.ConnectFailed, ex.Message); return; } } CreateEvent(EventReason.ConnectFailed, "连接的不是串口设备!"); }
/// <summary>Func:文件的下载 /// </summary> /// <param name="request"></param> /// <param name="response"></param> /// <param name="filename"></param> /// <param name="fullPath"></param> /// <param name="speed"></param> /// <returns></returns> public static bool ResponseFile(HttpRequest request, HttpResponse response, string filename, string fullPath, long speed) { try { FileStream myFile = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { //==**==// String fileName = HttpUtility.UrlEncode(filename, Encoding.UTF8); //==**==/ response.AddHeader("Accept-Ranges", "bytes"); response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; const double PACK = 10240; //10K bytes //int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * PACK / speed) + 1; if (request.Headers["Range"] != null) { response.StatusCode = 206; string[] range = request.Headers["Range"].Split('=', '-'); startBytes = Convert.ToInt64(range[1]); } response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); if (startBytes != 0) { //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength)); } response.AddHeader("Connection", "Keep-Alive"); //_Response.ContentType = "application/octet-stream"; response.ContentType = "text/x-xls"; //_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); response.HeaderEncoding = Encoding.UTF8; br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((fileLength - startBytes) / PACK) + 1; for (int i = 0; i < maxCount; i++) { if (response.IsClientConnected) { response.BinaryWrite(br.ReadBytes(int.Parse(PACK.ToString(CultureInfo.InvariantCulture)))); Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return(false); } finally { br.Close(); myFile.Close(); } } catch { return(false); } return(true); }