public static void doPrivateChatReceived(Model.Commands.PrivateChatCommand c, Model.Peer z) { if (privateChatReceived != null) { privateChatReceived(c, z); } }
public void privateChatReceived(Model.Commands.PrivateChatCommand c, Model.Peer z) { UI.UserPanel b = new UI.UserPanel(z); b.Dock = DockStyle.Fill; this.Invoke(new Action(delegate() { Control p = ((MainForm)App.mainForm).addOrSelectPanel(z.username, b, "(!) Files for " + z.id.ToString()); ((UI.UserPanel)p).selectChat(); ((UI.UserPanel)p).addLine(DateTime.Now.ToShortTimeString() + " " + z.username + ": " + c.content); flash(); })); }
public void commandReceived(Commands.Command c) { commandReceivedEvent?.Invoke(c); if (c is Commands.PrivateChatCommand) { Commands.PrivateChatCommand chat = (Commands.PrivateChatCommand)c; App.doPrivateChatReceived((Commands.PrivateChatCommand)c, this); } if (c is Commands.CancelCommand) { OutgoingConnection c3 = null; if (dataConnection != null) { if (dataConnection.connected) { c3 = dataConnection; } } string s = (((Commands.CancelCommand)c).path); lock (transfers) { if (transfers.ContainsKey(s)) { Transfer.transfers.Remove(transfers[s]); transfers.Remove(s); } } c3.send(c); } if (c is Commands.FileChunk) { var chunk = (Commands.FileChunk)c; string s = App.settings.getString("Default Download Folder", "C:\\Downloads"); if (!System.IO.Directory.Exists(s)) { System.IO.Directory.CreateDirectory(s); } System.IO.DirectoryInfo d = new System.IO.DirectoryInfo(s); string subfolderName = chunk.originalPath.TrimEnd('/'); if (chunk.originalPath.Contains("/")) { subfolderName = subfolderName.Substring(subfolderName.LastIndexOf("/") + 1); } string filename; if (chunk.originalPath == chunk.path) { filename = downloadFilePath(chunk.path); } else { string subfolderRealName = System.IO.Path.Combine(d.FullName, subfolderName); if (!System.IO.Directory.Exists(subfolderRealName)) { System.IO.Directory.CreateDirectory(subfolderRealName); } System.IO.DirectoryInfo currentFolder = new System.IO.DirectoryInfo(subfolderRealName); string[] remainingPath = chunk.path.TrimEnd('/').Substring(chunk.originalPath.TrimEnd('/').Length + 1).Split('/'); for (int i = 0; i < remainingPath.Length - 1; i++) { string blah = System.IO.Path.Combine(currentFolder.FullName, remainingPath[i]); if (!System.IO.Directory.Exists(blah)) { currentFolder = System.IO.Directory.CreateDirectory(blah); } } filename = currentFolder.FullName + "\\" + chunk.path.Substring(chunk.path.LastIndexOf("/") + 1); } System.Diagnostics.Stopwatch loopbackWatch = new System.Diagnostics.Stopwatch(); loopbackWatch.Start(); int attempts = 0; tryAgain: try { System.IO.FileStream f = new System.IO.FileStream(filename + ".incomplete", System.IO.FileMode.OpenOrCreate); f.Seek(chunk.start, System.IO.SeekOrigin.Begin); f.Write(chunk.data, 0, chunk.data.Length); if (f.Length >= chunk.totalSize && chunk.totalSize > 0) { f.Close(); System.IO.File.Move(filename + ".incomplete", filename); } else { f.Close(); } } catch (Exception e) { //if (attempts > 10) //throw e; System.Threading.Thread.Sleep(50); attempts++; goto tryAgain; } loopbackWatch.Stop(); lock (transfers) { if (transfers.ContainsKey(chunk.originalPath)) { Transfer t = transfers[chunk.originalPath]; if (t != null) { t.path = chunk.path; t.completed += (ulong)chunk.data.Length; if (t.completed >= t.size) { lock (Transfer.transfers) { transfers.Remove(chunk.originalPath); Transfer.transfers.Remove(t); t = null; } } } } } } }