コード例 #1
0
ファイル: App.cs プロジェクト: arran4/Dimension
 public static void doPrivateChatReceived(Model.Commands.PrivateChatCommand c, Model.Peer z)
 {
     if (privateChatReceived != null)
     {
         privateChatReceived(c, z);
     }
 }
コード例 #2
0
        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();
            }));
        }
コード例 #3
0
ファイル: Peer.cs プロジェクト: arran4/Dimension
        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;
                                }
                            }
                        }
                    }
                }
            }
        }