public AsyncServer(ServerSettings settings) { Settings = settings; ErrorLog = new List <ServerError>(); FileTransferHandler = new FileTransferHandler(settings); FileTransferHandler.EventOccurred += HandleServerEvent; FileTransferHandler.SocketEventOccurred += HandleSocketEvent; FileTransferHandler.FileTransferProgress += HandleFileTransferProgress; FileTransferHandler.ErrorOccurred += HandleErrorOccurred; FileTransferHandler.PendingFileTransfer += HandlePendingFileTransfer; FileTransferHandler.InboundFileAlreadyExists += SendNotificationFileAlreadyExists; FileTransferHandler.InboundFileTransferComplete += HandleInboundFileTransferComplete; FileTransferHandler.RequestedFileDoesNotExist += SendNotificationRequestedFileDoesNotExist; FileTransferHandler.ReceivedRetryOutboundFileTransferRequest += ReceivedRetryOutboundFileTransferRequest; FileTransferHandler.RetryLimitLockoutExpired += HandleRetryLimitLockoutExpired; _connectionHandler = new ConnectionHandler(settings); _connectionHandler.RegisterEventHandlers(this); _connectionHandler.EventOccurred += HandleServerEvent; _connectionHandler.ErrorOccurred += HandleErrorOccurred; _connectionHandler.AcceptedSocketConnection += HandleNewRequest; _requestHandler = new RequestHandler(MyInfo, Settings.SocketSettings); _requestHandler.RegisterEventHandlers(this); _requestHandler.EventOccurred += HandleServerEvent; _requestHandler.SocketEventOccurred += HandleSocketEvent; _requestHandler.ReceivedFileBytes += HandleFileBytesReceived; _requestHandler.ErrorOccurred += HandleErrorOccurred; _requestHandler.ReceivedServerInfoRequest += HandleServerInfoRequest; _requestHandler.ReceivedServerInfoResponse += HandleServerInfoResponse; _requestHandler.ReceivedFileListRequest += HandleFileListRequest; _requestHandler.RequestedFolderDoesNotExist += HandleRequestedFolderDoesNotExist; _requestHandler.RequestedFolderIsEmpty += HandleRequestedFolderIsEmpty; _requestHandler.ReceivedFileListResponse += HandleFileListResponse; _requestHandler.ReceivedTextMessage += ReceivedNewMessage; _requestHandler.ReceivedInboundFileTransferRequest += HandleInboundFileTransferRequest; _requestHandler.OutboundFileTransferRejected += HandleOutboundFileTransferRejected; _requestHandler.OutboundFileTransferAccepted += HandleOutboundFileTransferAccepted; _requestHandler.OutboundFileTransferComplete += HandleOutboundFileTransferComplete; _requestHandler.ReceivedOutboundFileTransferRequest += HandleOutboundFileTransferRequest; _requestHandler.RequestedFileDoesNotExist += HandleRequestedFileDoesNotExist; _requestHandler.OutboundFileTransferStalled += HandleOutboundFileTransferStalled; _requestHandler.ReceivedRetryStalledFileTransferRequest += HandleRetryOutboundFileTransfer; _requestHandler.ReceivedRetryLimitExceeded += HandleRetryLimitExceeded; _requestHandler.ReceivedShutdownServerCommand += HandleShutdownServerCommand; _messageHandler = new MessageHandler(); _messageHandler.EventOccurred += HandleServerEvent; _eventLog = new List <ServerEvent>(); _fileBytes = new List <byte>(); }
// 客户端修改了文件 public static bool modifyFile(string sourceFilePath, DateTime lastWriteTime, Socket curClientSocket) { try { FileTransferHandler.receiveFile(sourceFilePath, lastWriteTime, curClientSocket); return(true); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); return(false); } }
// 递归查找当前主目录 public static bool findFileAndSync(string home, Socket curClientSocket, string constHome) { string fullPath = null; string paraPath = null; DirectoryInfo Dir = new DirectoryInfo(home); try { // 查找子目录 foreach (DirectoryInfo d in Dir.GetDirectories()) { fullPath = Dir + "\\" + d.ToString(); paraPath = fullPath.Substring(constHome.Length + 1, fullPath.Length - constHome.Length - 1); // flag = 0 时表示同步的是文件夹 string lastWriteTime = Directory.GetLastWriteTime(fullPath).ToString(); byte[] message = MessageAssembler.assembleDir(paraPath, lastWriteTime); VerifyHandler.postMessage(curClientSocket, message); VerifyHandler.verify(curClientSocket); findFileAndSync(fullPath, curClientSocket, constHome); } // 查找文件 foreach (FileInfo f in Dir.GetFiles()) { fullPath = Dir + "\\" + f.ToString(); paraPath = fullPath.Substring(constHome.Length + 1, fullPath.Length - constHome.Length - 1); // flag = 1 时表示同步的是文件 string lastWriteTime = File.GetLastWriteTime(fullPath).ToString(); byte[] message = MessageAssembler.assembleFile(paraPath, lastWriteTime); VerifyHandler.postMessage(curClientSocket, message); if (!VerifyHandler.verify(curClientSocket)) { FileTransferHandler.postFile(curClientSocket, fullPath); VerifyHandler.verify(curClientSocket); } } return(true); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); return(false); } }
public static bool syncNow(string home, Socket curClientSocket) { bool loop = true; string fullPath = null; string para1 = null; string para2 = null; DateTime lastWriteTime = new DateTime(); byte[] receiveBytes = new byte[CommonStaticVariables.constSize]; while (loop) { if (curClientSocket.Poll(100, SelectMode.SelectRead)) { int successReceiveBytes = curClientSocket.Receive(receiveBytes); string[] parMessage; if ((parMessage = MessageParser.parseFileMessage(receiveBytes)) != null) { string flag = parMessage[0]; para1 = parMessage[1]; para2 = parMessage[2]; switch (flag) { case "0": // 文件夹 fullPath = home + "\\" + para1; lastWriteTime = DateTime.Parse(para2); if (!Directory.Exists(fullPath)) { Directory.CreateDirectory(fullPath); } Directory.SetLastWriteTime(fullPath, lastWriteTime); VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageDoneEncrypted); break; case "1": // 文件 fullPath = home + "\\" + para1; lastWriteTime = DateTime.Parse(para2); if (!File.Exists(fullPath)) { VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageFailedEncrypted); // 接收从客户器端传来的文件 FileTransferHandler.receiveFile(fullPath, lastWriteTime, curClientSocket); VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageDoneEncrypted); // 接收从客户器端传来的文件 } else { if (lastWriteTime == File.GetLastWriteTime(fullPath)) { VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageDoneEncrypted); } else { VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageFailedEncrypted); // 接收从客户器端传来的文件 FileTransferHandler.receiveFile(fullPath, lastWriteTime, curClientSocket); VerifyHandler.postMessage(curClientSocket, CommonStaticVariables.messageDoneEncrypted); } } break; case "2": // 同步完成 loop = false; break; default: break; } } } } return(true); }
private void FileTransferHandler_InvitationReceived(FileTransferHandler sender, FileTransferInvitationEventArgs e) { //e.FileTransfer. MessageBox.Show(e.FileTransfer.Sender.Name + " vill Skicka filen: " + e.FileTransfer.FileName + "! \nStorlek: " + e.FileTransfer.FileSize.ToString() + "B"); //e.FileTransfer. }
private static IHandlerMapper InitApi(ConfigurationProviderBase prov) { string root = "api/"; VerbRestrictingMatchRule verbs = new VerbRestrictingMatchRule(HttpVerbs.GET.ToString(), HttpVerbs.POST.ToString()); UrlBaseMatchRule url = new UrlBaseMatchRule(new string[] { root }); verbs.NextMatcher = url; ServerRouting router = new ServerRouting(); SessionIdHeader head = new SessionIdHeader(); head.Next = router; MatchRuleMapHandler mapper = new MatchRuleMapHandler(head, verbs); //add all other handlers Session s = new Session(); router.Map.Add(new UrlBaseMapHandler(s, root + s.BaseUrl)); Login l = new Login(); router.Map.Add(new UrlBaseMapHandler(l, root + l.BaseUrl)); UserAuthorizations au = new UserAuthorizations(); router.Map.Add(new UrlBaseMapHandler(au, root + au.BaseUrl)); UserAffiliationHandler uah = new UserAffiliationHandler(); router.Map.Add(new UrlBaseMapHandler(uah, root + uah.BaseUrl)); Request req = new Request(); router.Map.Add(new UrlBaseMapHandler(req, root + req.BaseUrl)); OrganizationHandler orgs = new OrganizationHandler(); router.Map.Add(new UrlBaseMapHandler(orgs, root + orgs.BaseUrl)); SitesHandler sites = new SitesHandler(); router.Map.Add(new UrlBaseMapHandler(sites, root + sites.BaseUrl)); ProjectsHandler projs = new ProjectsHandler(); router.Map.Add(new UrlBaseMapHandler(projs, root + projs.BaseUrl)); FieldActivitiesHandler fas = new FieldActivitiesHandler(); router.Map.Add(new UrlBaseMapHandler(fas, root + fas.BaseUrl)); FileTransferHandler fts = new FileTransferHandler(); router.Map.Add(new UrlBaseMapHandler(fts, root + fts.BaseUrl)); InstrumentsHandler inst = new InstrumentsHandler(); router.Map.Add(new UrlBaseMapHandler(inst, root + inst.BaseUrl)); PersonsHandler per = new PersonsHandler(); router.Map.Add(new UrlBaseMapHandler(per, root + per.BaseUrl)); TaxaHandler tax = new TaxaHandler(); router.Map.Add(new UrlBaseMapHandler(tax, root + tax.BaseUrl)); WQHandler wq = new WQHandler(); router.Map.Add(new UrlBaseMapHandler(wq, root + wq.BaseUrl)); FishHandler fish = new FishHandler(); router.Map.Add(new UrlBaseMapHandler(fish, root + fish.BaseUrl)); VegetationHandler veg = new VegetationHandler(); router.Map.Add(new UrlBaseMapHandler(veg, root + veg.BaseUrl)); EntityBundlesHandler ebh = new EntityBundlesHandler(); router.Map.Add(new UrlBaseMapHandler(ebh, root + ebh.BaseUrl)); DetsHandler det = new DetsHandler(); router.Map.Add(new UrlBaseMapHandler(det, root + det.BaseUrl)); return(mapper); }