public void DisplayRecv(string strRecv) { if (textAsyncRecv.InvokeRequired) { RecvText _myInvoke = new RecvText(DisplayRecv); this.Invoke(_myInvoke, new object[] { strRecv }); } else { this.textAsyncRecv.AppendText(strRecv + "\n"); } }
private void Form1_Load(object sender, EventArgs e) { initSendBox(); //StringBuilder r = new StringBuilder(); //for (int i = ' '; i < 128; i++) // r.Append((char)i); //FileData.Text = r.ToString(); ips = getIPAddress(); GetIPID = Encoding.Default.GetBytes("print(\"ID:\"..node.chipid())"); OutPoint = new IPEndPoint(IPAddress.Any, 0); BroadcastFlag = true; new Task(() => { while (!this.IsDisposed) { try { byte[] buff = Search.Receive(ref OutPoint); lasttarget = OutPoint.Address; OutPoint.Address = IPAddress.Any; OutPoint.Port = 0; string value = Encoding.Default.GetString(buff); if (value.IndexOf("[") == 0) { value = value.Substring(1); value = value.Substring(0, value.Length - 1); } if (value.IndexOf("ID:") == 0) { IPAddress ip = OutPoint.Address; int id = int.Parse(value.Substring(3)); bool isfind = false; foreach (CarData car in DevSelect.Items) { if (car.ID == id) { if (car.ip.Address != lasttarget.Address) { car.ip = lasttarget; } isfind = true; break; } } if (!isfind) { CarData cd = new CarData(lasttarget, id); Invoke(new MethodInvoker(() => { DevSelect.Items.Add(cd); if (DevSelect.SelectedIndex == -1) { DevSelect.SelectedIndex = 0; } })); } Invoke(new MethodInvoker(() => { DevSelect.Update(); })); continue; } else { Invoke(new MethodInvoker(() => { RecvText.AppendText(value + "\r\n"); })); } if (DownloadFlag) { if (value.IndexOf("W:") == 0) { int pos = int.Parse(value.Substring(2)); if (pos == WriteID) { WriteID++; if (WriteID < 0) { SendTargetData("file.open(\"" + TargetFile.name + "\",\"w+\") print(\"W:" + WriteID + "\")"); } else if (WriteID < TargetFile.lines.Count) { SendTargetData("file.writeline('" + TargetFile.lines[WriteID].Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("'", "\\'") + "') print('W:" + WriteID + "')"); Invoke(new MethodInvoker(() => { Downprogress.Value = WriteID * 100 / TargetFile.lines.Count; })); } else { SendTargetData("file.close()"); Invoke(new MethodInvoker(() => { Downprogress.Value = 100; Downprogress.Visible = false; DownloadFlag = false; })); } } } else if (value.IndexOf("D:") == 0) { int pos = int.Parse(value.Substring(2)); if (pos == WriteID) { WriteID++; if (WriteID < 0) { SendTargetData("file.open(\"" + TargetFile.name + "\",\"w+\") function t2s(t) for i=1,#t do t[i]=string.char(t[i]) end return table.concat(t) end rp=" + WriteID + " print(\"D:\"..rp)"); } else if ((TargetFile.stream.Length - TargetFile.stream.Position) != 0) { StringBuilder sb = new StringBuilder(); int i = (TargetFile.stream.Length - TargetFile.stream.Position) >= 32 ? 32 : (int)(TargetFile.stream.Length - TargetFile.stream.Position); while (i-- != 0) { sb.Append(TargetFile.stream.ReadByte()); sb.Append(','); } TargetFile.writeInfo = sb.ToString(); SendTargetData("file.write(t2s({" + TargetFile.writeInfo + "})) rp=" + WriteID + " print(\"D:\"..rp)"); Invoke(new MethodInvoker(() => { Downprogress.Value = WriteID * 100 / (int)(TargetFile.stream.Length / 32); })); } else { SendTargetData("file.close()"); Invoke(new MethodInvoker(() => { Downprogress.Value = 100; //Downprogress.Visible = false; })); } } } } } catch { } } }).Start(); int SearchCount = 15; new Task(() => { while (!this.IsDisposed) { try { if (++SearchCount >= 15) { if (BroadcastFlag) { BroadcastData(GetIPID); } SearchCount = 0; } } catch { } Thread.Sleep(100); } }).Start(); }