// Async callback on result of requesting to send a file private void ProcessFileSendRequestRs(FileSendRequestRq request, FileSendRequestRs res, Exception e, FileSendInfo fileInfo) { if (e != null) { Chat.LogSystemMessage("An error occured trying to send " + _engagement.SecondParty.Party.Username + " a request to send them " + fileInfo.Filename); Logger.Error("Failed to send file send request for " + fileInfo.Filename); RemovePendingFileSend(fileInfo.FileSendId); OnNewActivity(new FileSendActivity(_engagement, FileSendActivity.FILE_SEND_REQUEST_FAILED) { From = "_SELF", To = _engagement.SecondParty.Party.Username, FileInfo = fileInfo }); } else { } }
// Request to send a file to user internal void RequestFileSend(String filepath) { String filename = Path.GetFileName(filepath); try { FileSendInfo fileInfo = new FileSendInfo() { Filename = filename, FileSize = new FileInfo(filepath).Length, FileSendId = Util.getSingleton().generateString(8), FilePath = filepath, Direction = FileSendDirection.Send }; FileSendRequestRq request = new FileSendRequestRq() { shortCode = _engagement.SecondParty.ActiveShortCode, username = _engagement.SecondParty.Party.Username, filename = fileInfo.Filename, fileSize = fileInfo.FileSize, fileSendId = fileInfo.FileSendId, interactionId = _engagement.Interactions.CurrentOrNewInteraction.Id }; try { Chat.LogSystemMessage(string.Format("Sending {0} the file {1}, waiting for acceptance.", _engagement.SecondParty.Party.Firstname, filename)); _appContext.ConnectionManager.Connection.RequestAsync<FileSendRequestRq, FileSendRequestRs>(request, (req, res, ex) => ProcessFileSendRequestRs(req, res, ex, fileInfo)); Logger.Info("Requested to send " + fileInfo.Filename + " to " + _engagement.SecondParty.Party.Username); fileInfo.State = FileSendState.PendingSend; _pendingFileSends.Add(request.fileSendId, fileInfo); IsActive = true; var notification = new CancellableNotification() { AssociatedUsername = _engagement.SecondParty.Party.Username, Message = "Offering " + _engagement.SecondParty.Party.Firstname + " " + fileInfo.Filename, CancelTooltip = "Cancel File Send", Id = fileInfo.FileSendId }; notification.Cancelled += (sender, args) => CancelFileOffer(fileInfo); fileInfo.Notification = notification; _appContext.NotificationManager.AddNotification(notification); OnNewActivity(new FileSendActivity(_engagement, FileSendActivity.FILE_SEND_REQUEST) { From = "_SELF", To = _engagement.SecondParty.Party.Username, FileInfo = fileInfo }); } catch (Exception ex) { Logger.Error("Error during request for File Send : " + ex.Message, ex); Chat.LogErrorMessage("An error occured trying to send " + _engagement.SecondParty.Party.Firstname + " a request to send them a file."); } } catch (Exception ex) { Logger.Error("Error setting up request for file send : " + ex.Message, ex); Chat.LogErrorMessage("An error occured trying to send " + _engagement.SecondParty.Party.Firstname + " a request to send them a file."); } }