/// <summary> /// This method is invoked to request the filelist from the peer /// </summary> /// <returns>The peer file list</returns> private IDictionary<int, string> GetFileList() { AMessageData messageData = new FileListGetMessageData(new Dictionary<int, string>()); Message fileListGetMessage = new Message(new MessageHeader(ServiceTypes.FILE_LIST_GET), messageData); byte[] buffer = fileListGetMessage.Serialize(); receiverStream.Write(buffer, 0, buffer.Length); byte[] headerBuffer = new byte[MessageHeader.HEADER_SIZE]; int readBytes = receiverStream.Read(headerBuffer, 0, MessageHeader.HEADER_SIZE); if (readBytes < MessageHeader.HEADER_SIZE) { #warning must test this part!!!!!!!! receiverStream.Flush(); return new Dictionary<int,string>(); } ushort contentLength = AMessageData.ToShort(headerBuffer[MessageHeader.HEADER_SIZE - 2], headerBuffer[MessageHeader.HEADER_SIZE-1]); byte[] rawDataBuffer = new byte[headerBuffer.Length + contentLength]; Array.Copy(headerBuffer, 0, rawDataBuffer, 0, headerBuffer.Length); readBytes = receiverStream.Read(rawDataBuffer, headerBuffer.Length, contentLength); if (readBytes != contentLength) { #warning must test this part!!!!!!!! receiverStream.Flush(); return new Dictionary<int, string>(); } Message receivedMessage = new Message(rawDataBuffer); if (receivedMessage.Header.ServiceType != ServiceTypes.FILE_LIST_GET) { return new Dictionary<int, string>(); } FileListGetMessageData fileListMessageData = (FileListGetMessageData)Message.GetMessageData(receivedMessage); return fileListMessageData.FileList; }
/// <summary> /// Creates a file list packet and sends it to the peer /// </summary> private void SendFileList() { AMessageData messageData = new FileListGetMessageData(_fileList); Message fileListMessage = new Message(new MessageHeader(ServiceTypes.FILE_LIST_GET), messageData); byte[] buffer = fileListMessage.Serialize(); client.GetStream().Write(buffer, 0, buffer.Length); }
private void RequestedFileList(IDictionary<int, string> fileList, Socket contactSocket) { FileListGetMessageData messageData = new FileListGetMessageData(fileList); Message newMessage = new Message(new MessageHeader(ServiceTypes.FILE_LIST_GET), messageData); contactSocket.Send(newMessage.Serialize()); PeerClientData data = _connectedClients[contactSocket]; data.FileId = -1; _connectedClients.Remove(contactSocket); data.Socket.Close(); }