public SendStatus UploadFile(FileSendInfo lstFileinfo)
        {
            SendStatus result = SendStatus.Complete;

            try
            {
                FileInfo file = new FileInfo(lstFileinfo.FileFullPath);
                if (file.Exists == false)
                {
                    Debug.Assert(false, "파일이 존재하지 않습니다 : " + lstFileinfo.FileFullPath);
                    result = SendStatus.Fail;
                }

                string strFilePath = "IH" + DateTime.Now.ToString("yyyyMMddHHmmssfff00") + file.Extension;

                fileTransferUtility.Upload(lstFileinfo.FileFullPath, bucketName, strFilePath);
                Console.WriteLine("Upload Complete : " + lstFileinfo.FileFullPath);
                log.Debug("Upload Complete : " + lstFileinfo.FileFullPath + " / " + strFilePath);
            }
            catch (AmazonS3Exception e)
            {
                Debug.Assert(false, e.Message);
                log.Error(string.Format("Error encountered on server. Message:'{0}' when writing an object", e.Message));
                result = SendStatus.Fail;
            }
            catch (Exception e)
            {
                Debug.Assert(false, e.Message);
                log.Error(string.Format("Unknown encountered on server. Message:'{0}' when writing an object", e.Message));
                result = SendStatus.Fail;
            }

            return(result);
        }
示例#2
0
        private int fileSpeed = 60 * 1024;//buffer lebngth

        public MainWindow()
        {
            try
            {
                InitializeComponent();
                this.fileScrollViewer.Background  = Brushes.LightGray;
                this.fileScrollViewer.BorderBrush = Brushes.Gray;
            }
            catch (Exception ex)
            {
                AppLog.SysLog(ex.ToString());
            }

            try
            {
                localInfo = new UserInfo
                {
                    IpAddress = NetworkUtil.GetLocalIp(),
                    Name      = this.textBox1.Text
                };

                richTextBox1.KeyDown += richTextBox1_KeyDown;

                this.userList.SelectionChanged += new SelectionChangedEventHandler(new EventHandler((object obj, EventArgs e) =>
                {
                    if (fileCanvas.Children.Count > 0)
                    {
                        MessageBox.Show("有尚未完成的文件传输");
                        return;
                    }
                    if (userList.SelectedItem != null)
                    {
                        selectInfo = new UserInfo {
                            IpAddress = (userList.SelectedItem as ListBoxItem).Content.ToString()
                        }
                    }
                    ;
                }));

                fileReceive = new Queue();
                fileSend    = new Queue();
                running     = true;
                broadcast   = new UdpServer(IPAddress.Parse(NetworkUtil.GetNetBroad()), IPAddress.Any, port);
                Online      = new MessageInfo {
                    From = localInfo, MessageType = MessageInfo.Type.Sign, MessageSign = MessageInfo.Sign.Online
                };

                broadcast.OnReceiveComplete += new UdpServer.ReceiveComplete((s) =>
                {
                    MemoryStream ms = new MemoryStream(s);
                    MessageInfo msg = NetBird.Util.Serializable.Deserialize <MessageInfo>(ms);
                    ms.Close();
                    if (msg.From != null)
                    {
                        switch (msg.MessageType)
                        {
                        case MessageInfo.Type.Sign:
                            switch (msg.MessageSign)
                            {
                            case MessageInfo.Sign.Online: this.userList.Dispatcher.Invoke(new Action(() =>
                                {
                                    //AddUserList(msg.From); //测试时允许添加本机IP到UserList
                                    if (msg.From.IpAddress == localInfo.IpAddress)
                                    {
                                        return;
                                    }
                                    AddUserList(msg.From);
                                    MessageInfo rspInfo = new MessageInfo {
                                        From = localInfo, MessageSign = MessageInfo.Sign.ResponseOnline, MessageType = MessageInfo.Type.Sign
                                    };
                                    broadcast.SendMessage(Serializable.SerializableToBytes(rspInfo), IPAddress.Parse(msg.From.IpAddress), port);
                                }));
                                break;

                            case MessageInfo.Sign.Offline:

                                this.userList.Dispatcher.Invoke(new Action(() =>
                                {
                                    if (localInfo.IpAddress != msg.From.IpAddress)
                                    {
                                        RemoveUserList(msg.From);
                                    }
                                }));
                                break;

                            case MessageInfo.Sign.FileRequest:
                                if (msg.Attachment != null)
                                {
                                    fileReceive.Enqueue(msg);
                                }
                                break;

                            case MessageInfo.Sign.FileAccept:
                                if (msg.Attachment != null)
                                {
                                    fileSend.Enqueue(msg);
                                }
                                break;

                            case MessageInfo.Sign.ResponseOnline:
                                this.userList.Dispatcher.Invoke(new Action(() =>
                                {
                                    AddUserList(msg.From);
                                }));
                                break;
                            }
                            break;

                        case MessageInfo.Type.Common:
                            CommonMessage(string.Format("{0}:{1}", msg.From.IpAddress, msg.MessageBody));
                            break;
                        }
                    }
                });

                broadcast.OnSendComplete += new UdpServer.SendComplete(() => { });

                broadcast.SendMessage(NetBird.Util.Serializable.SerializableToBytes(Online));
                broadcast.StartListen();

                //udpClient = new UdpClient(port);
                //listen = new UdpClient(port);
                //tcpClient = new TcpClient();

                fileThread = new Thread(new ThreadStart(() =>
                {
                    fileRequestListen = new UdpServer(IPAddress.Parse(localInfo.IpAddress), IPAddress.Any, filePort);
                    fileRequestListen.StartListen();
                    fileRequestListen.OnSendComplete    += new UdpServer.SendComplete(() => { });
                    fileRequestListen.OnReceiveComplete += new UdpServer.ReceiveComplete((byte[] content) =>
                    {
                        MemoryStream ms     = new MemoryStream(content);
                        FileSendInfo fsInfo = Serializable.Deserialize <FileSendInfo>(ms);
                        ms.Close();
                        switch (fsInfo.Type)
                        {
                        case FileSendInfo.InfoType.Send:
                            this.fileRCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                try
                                {
                                    var rlb = GetFileLabelById(fsInfo.Id);
                                    if (rlb != null)
                                    {
                                        FileStream rfs = File.OpenWrite(rlb.FilePath);
                                        rfs.Position   = fsInfo.Seek;
                                        rfs.Write(fsInfo.Content, 0, fsInfo.Content.Length);
                                        int rseek = (int)rfs.Length;
                                        rfs.Close();
                                        //double ss = (double)rseek / (double)rlb.FileLength;
                                        rlb.Progress.Value    = ((double)rseek / (double)rlb.FileLength) * 100;
                                        FileSendInfo rnfsInfo = new FileSendInfo {
                                            Id = fsInfo.Id, Seek = rseek, Type = FileSendInfo.InfoType.Back, IpAddress = localInfo.IpAddress
                                        };
                                        fileRequestListen.SendMessage(Serializable.SerializableToBytes(rnfsInfo), IPAddress.Parse(fsInfo.IpAddress), filePort);
                                    }
                                }
                                catch (Exception ex0)
                                {
                                    throw ex0;
                                }
                            }));
                            break;

                        case FileSendInfo.InfoType.Back:
                            this.fileCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                try
                                {
                                    var lb               = fileCanvas.Children[fsInfo.Id] as Controls.FileLabel;
                                    int seek             = fsInfo.Seek;
                                    FileSendInfo nfsInfo = null;
                                    FileStream fs        = File.OpenRead(lb.FilePath);
                                    //文件发送完信号
                                    if (fs.Length - 1 < seek)
                                    {
                                        nfsInfo = new FileSendInfo {
                                            Id = fsInfo.Id, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.Over
                                        };
                                    }
                                    else
                                    {
                                        byte[] buffer = new byte[fileSpeed];
                                        fs.Position   = seek;
                                        fs.Read(buffer, 0, buffer.Length);
                                        fs.Close();
                                        lb.Progress.Value = ((double)seek / (double)lb.FileLength) * 100;
                                        nfsInfo           = new FileSendInfo {
                                            Id = fsInfo.Id, Seek = seek, Content = buffer, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.Send
                                        };
                                    }
                                    fileRequestListen.SendMessage(Serializable.SerializableToBytes(nfsInfo), IPAddress.Parse(fsInfo.IpAddress), filePort);
                                }
                                catch (Exception ex0)
                                {
                                    throw ex0;
                                }
                            }));
                            break;

                        case FileSendInfo.InfoType.SendClose:
                        case FileSendInfo.InfoType.Over:
                            this.fileRCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                var olb = GetFileLabelById(fsInfo.Id);
                                if (olb != null)
                                {
                                    olb.Close();
                                }
                            }));
                            break;

                        case FileSendInfo.InfoType.AcceptClose:
                            this.fileCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                var lb = fileCanvas.Children[fsInfo.Id] as Controls.FileLabel;
                                if (lb != null)
                                {
                                    lb.Close();
                                }
                            }));
                            break;
                        }
                    });

                    while (running)
                    {
                        if (fileSend.Count > 0)
                        {
                            MessageInfo fileInfo = fileSend.Dequeue() as MessageInfo;
                            AttachmentInfo attr  = fileInfo.Attachment[0];
                            this.fileCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                Controls.FileLabel lb = fileCanvas.Children[attr.Id] as Controls.FileLabel;
                                lb.onCloseFile       += new Controls.FileLabel.CloseEvent(() =>
                                {
                                    FileSendInfo fsOver = new FileSendInfo {
                                        Id = attr.Id, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.SendClose
                                    };
                                    fileRequestListen.SendMessage(Serializable.SerializableToBytes(fsOver), IPAddress.Parse(fileInfo.From.IpAddress), filePort);
                                });
                                byte[] buffer = new byte[fileSpeed];
                                FileStream fs = File.OpenRead(lb.FilePath);
                                fs.Position   = 0;
                                fs.Read(buffer, 0, buffer.Length);
                                fs.Close();
                                FileSendInfo fsInfo = new FileSendInfo {
                                    Id = attr.Id, Seek = 0, Content = buffer, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.Send
                                };
                                fileRequestListen.SendMessage(Serializable.SerializableToBytes(fsInfo), IPAddress.Parse(fileInfo.From.IpAddress), filePort);
                                //fileRequestListen.SendMessage();

                                //todu 发送文件
                            }));
                        }

                        if (fileReceive.Count > 0)
                        {
#if DEBUG
                            try
                            {
#endif
                            //todo 接受文件 (需要Add到FileCanvas)
                            MessageInfo fileInfo = fileReceive.Dequeue() as MessageInfo;
                            AttachmentInfo attr  = fileInfo.Attachment[0];
                            this.fileRCanvas.Dispatcher.Invoke(new Action(() =>
                            {
                                var fb             = new Controls.FileLabel(string.Format("{0}{1}.{2}", PathInfo.GetUserAttachmentDir(), attr.Name, attr.Ext));
                                fb.Id              = attr.Id;
                                fb.FileLength      = attr.Length;
                                fb.fileIcon.Source = IconHelper.GetIcon(attr.Icon.Handle);
                                fb.onCloseFile    += new Controls.FileLabel.CloseEvent(() =>
                                {
                                    foreach (UserControl uie in this.fileRCanvas.Children)
                                    {
                                        if (uie.Margin.Top > fb.Margin.Top)
                                        {
                                            uie.Margin = new Thickness(uie.Margin.Left, uie.Margin.Top - fb.Height, uie.Margin.Right, uie.Margin.Bottom);
                                        }
                                    }
                                    if (this.fileRCanvas.Height > 200)
                                    {
                                        this.fileRCanvas.Height -= fb.Height;
                                    }
                                });
                                fb.onClosedFile += new Controls.FileLabel.ClosedEvent(() =>
                                {
                                    if (this.fileRCanvas.Children.Count > 0)
                                    {
                                        return;
                                    }
                                    this.Width -= 200;
                                    fileRScrollViewer.Visibility = System.Windows.Visibility.Collapsed;
                                    FileSendInfo fsOver          = new FileSendInfo {
                                        Id = attr.Id, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.AcceptClose
                                    };
                                    fileRequestListen.SendMessage(Serializable.SerializableToBytes(fsOver), IPAddress.Parse(fileInfo.From.IpAddress), filePort);
                                });
                                fb.onProgressBegin += new Controls.FileLabel.ProgressBeginEvent(() =>
                                {
                                    fb.Height          += 10;
                                    FileSendInfo fsInfo = new FileSendInfo {
                                        Id = attr.Id, Seek = 0, IpAddress = localInfo.IpAddress, Type = FileSendInfo.InfoType.Back
                                    };
                                    fileRequestListen.SendMessage(Serializable.SerializableToBytes(fsInfo), IPAddress.Parse(fileInfo.From.IpAddress), filePort);
                                });
                                fb.onProgressEnd += new Controls.FileLabel.ProgressEndEvent(() =>
                                {
                                    fb.Height -= 10;
                                });
                                AddFileToCanvas(fb, ref this.fileRScrollViewer, ref this.fileRCanvas);
                                fb.Accept();
                            }));
#if DEBUG
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
#endif
                        }
                    }
                }));

                fileThread.IsBackground = true;
                fileThread.Start();

                this.richTextBox1.AddHandler(RichTextBox.DragOverEvent, new DragEventHandler(richTextBox1_DragOver), true);
                this.richTextBox1.AddHandler(RichTextBox.DropEvent, new DragEventHandler(richTextBox1_Drop), true);
                this.richTextBox1.AddHandler(RichTextBox.DragLeaveEvent, new DragEventHandler(richTextBox1_DragLeave), true);
                bs = this.richTextBox1.BorderBrush;
            }
            catch (Exception e)
            {
                AppLog.SysLog(e.ToString());
            }
        }