/// <summary> /// /// </summary> /// <param name="remoteClient"></param> /// <param name="xferID"></param> /// <param name="fileName"></param> public void RequestXfer(IClientAPI remoteClient, ulong xferID, string fileName) { lock (NewFiles) { if (NewFiles.ContainsKey(fileName)) { if (!Transfers.ContainsKey(xferID)) { byte[] fileData = NewFiles[fileName]; XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient); Transfers.Add(xferID, transaction); NewFiles.Remove(fileName); if (transaction.StartSend()) { Transfers.Remove(xferID); } } } else { if (RequestTime.Count > 0) { TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - RequestTime[0].timeStamp.Ticks); if (ts.TotalSeconds > 30) { Requests.Remove(RequestTime[0].fileName); RequestTime.RemoveAt(0); } } if (!Requests.ContainsKey(fileName)) { XferRequest nRequest = new XferRequest(); nRequest.remoteClient = remoteClient; nRequest.xferID = xferID; nRequest.fileName = fileName; nRequest.timeStamp = DateTime.UtcNow; Requests.Add(fileName, nRequest); RequestTime.Add(nRequest); } } } }