public void HandleHolePunchRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } UdpHpServer.uhps.OnRequestHolePunch(mr.ClientEP(), mr.PunchClientEP()); }
public void HandleResendChunkHashRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } HashSender.ResendHash(mr.ClientEP(), mr.ReadFileId(), mr.ReadChunkId()); }
public void HandleFileDeletedRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } int clientEp = mr.ClientEP(); int fileId = mr.ReadFileId(); int affectedRows = Owner.Delete(clientEp, fileId); }
public void HandleMessage(EndPoint endPoint, byte[] msg) { C2SMessageReader mr = new C2SMessageReader(msg); switch (mr.MsgType()) { case MessageType.c2s_ConnectRequest: HandleRequestConnect(endPoint, mr); break; case MessageType.c2s_HolePunchRequest: HandleHolePunchRequest(mr); break; case MessageType.c2c_CloseConnection: break; case MessageType.ft_FileRegistrationRequest: HandleRequestFileUpload(mr); break; case MessageType.ft_ChunkHash: HandleNewChunkHash(mr); break; case MessageType.c2s_FileClientListRequest: HandleFileClientListRequest(mr); break; case MessageType.c2s_ClientAvailabilityRequest: HandleClientAvailabilityRequest(mr); break; case MessageType.ft_FileHashTransferRequest: HandleFileHashTransferRequest(mr); break; case MessageType.ft_ResendChunkHashRequest: HandleResendChunkHashRequest(mr); break; case MessageType.c2s_FileSearchByNameRequest: HandleFileSearchByNameRequest(mr); break; case MessageType.c2s_FileDeleted: HandleFileDeletedRequest(mr); break; default: break; } }
public void HandleFileSearchByNameRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } string keyword = mr.ReadFileNameKeyword(); List <File> files = File.GetFiles(keyword); ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om = smp.ProvideFileSearchByNameMessage(files); ServerCommunicationCenter.commCenter.SendMessageTo(mr.ClientEP(), om); }
public void HandleFileHashTransferRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } HashSender.SendAllHashes(mr.ClientEP(), mr.ReadFileId()); Owner owner = new Owner(); owner.ApplicationId = mr.ClientEP(); owner.FileId = mr.ReadFileId(); owner.Add(); }
public void HandleClientAvailabilityRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } if (ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ReadRequestedClientId())) { ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om = smp.ProvideClientAvailableMessage(mr.ReadRequestedClientId()); ServerCommunicationCenter.commCenter.SendMessageTo(mr.ClientEP(), om); } }
public void HandleFileClientListRequest(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } int fileId = mr.ReadFileId(); List <int> clientList = File.GetFileOwnersId(mr.ReadFileId()); clientList.Remove(mr.ClientEP()); ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om = smp.ProvideClientListMessage(fileId, clientList); ServerCommunicationCenter.commCenter.SendMessageTo(mr.ClientEP(), om); }
public void HandleNewChunkHash(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } ChunkHash ch = mr.ReadChunkHash(); int id = mr.ReadRegisteringFileId(); Debug.WriteLine("hash for:" + id); if (!ServerObjectGraph.sog.FileRegistrations.ContainsKey(id)) { return; } ServerObjectGraph.sog.FileRegistrations[id].HashArrived(ch); }
public void HandleRequestFileUpload(C2SMessageReader mr) { if (!ServerCommunicationCenter.commCenter.ClientsEndPoint.ContainsKey(mr.ClientEP())) { return; } Debug.WriteLine("SR: Received request for registration"); ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om; string fileFullName = mr.ReadRegisteringFileFullName(); string ext = Utils.GetFileExtensionFromPath(fileFullName); string name = Utils.GetFileNameFromPath(fileFullName); bool duplikat = File.Exists(name, ext, mr.ReadRegisteringFileSize()); if (!duplikat) { File f = new File(); f.ApplicationId = mr.ClientEP(); f.FileExtension = ext; f.FileName = name; f.FileSize = mr.ReadRegisteringFileSize(); int fileId = f.Add(); om = smp.ProvidePositiveUploadFileMessage(fileId); HashManager shr = new HashManager(mr.ClientEP(), Sizes.GetChunksNumber(mr.ReadRegisteringFileSize()), fileId, new ServerHashManagerListener()); Debug.WriteLine("File: " + fileId); Debug.WriteLine("FileSize: " + f.FileSize); ServerObjectGraph.sog.FileRegistrations.Add(fileId, shr); Debug.WriteLine("SR: Registration approved"); } else { om = smp.ProvideNegativeUploadFileMessage(); } ServerCommunicationCenter.commCenter.SendMessageTo(mr.ClientEP(), om); }
public void HandleRequestConnect(EndPoint publicEndPoint, C2SMessageReader mr) { Debug.WriteLine("SR: Client" + mr.ClientEP() + " connected"); int clientEp = mr.ClientEP(); if (clientEp == -1) { Peer p = new Peer(); p.LastVisit = DateTime.Now; p.IpAddress = IPAddress.Any; int id = p.Add(); ServerCommunicationCenter.commCenter.ClientConnected(id, new ClientEndPoint((IPEndPoint)publicEndPoint, mr.ClientPrivateEP())); ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om = smp.ProvideApplicationRegisterResponseMessage(id); ServerCommunicationCenter.commCenter.SendMessage(publicEndPoint, om); } else { ServerCommunicationCenter.commCenter.ClientConnected(mr.ClientEP(), new ClientEndPoint((IPEndPoint)publicEndPoint, mr.ClientPrivateEP())); ServerMessageProvider smp = new ServerMessageProvider(SocketResourcesManager.srm.ProvideBuffer()); OutputMessage om = smp.ProvideConnectedMessage(); ServerCommunicationCenter.commCenter.SendMessageTo(mr.ClientEP(), om); } }