Пример #1
0
 public CSharedFiles(MemoryStream buffer, CFilesList fileList)
 {
     BinaryWriter writer = new BinaryWriter(buffer);
     DonkeyHeader header = new DonkeyHeader((byte)Protocol.ClientCommand.AskSharedFilesAnswer, writer);
     writer.Write((uint)fileList.Count);
     lock (fileList)
     {
         foreach (CElement Elemento in fileList.Values)
         {
             writer.Write(Elemento.File.FileHash);
             writer.Write((uint)0);
             writer.Write((ushort)0);
             writer.Write(Elemento.File.FileType);
             // file name
             new ParameterWriter((byte)Protocol.FileTag.Name, Elemento.File.FileName, writer);
             // file size
             new ParameterWriter((byte)Protocol.FileTag.Size, Elemento.File.FileSize, writer);
         }
     }
     header.Packetlength = (uint)writer.BaseStream.Length - header.Packetlength + 1;
     writer.Seek(0, SeekOrigin.Begin);
     header.Serialize(writer);
 }
Пример #2
0
 //constructor to publish a list of files
 public CServerPublishFiles(MemoryStream buffer, CFilesList FilesList, uint startIndex)
 {
     DonkeyHeader header;
     LastFilePublished = startIndex;
     BinaryWriter writer = new BinaryWriter(buffer);
     header = new DonkeyHeader((byte)Protocol.ServerCommand.OfferFiles, writer);
     writer.Write((uint)FilesList.Count);
     uint nfiles = 0;
     int fileIndex = 0;
     foreach (CElement element in FilesList.Values)
     {
         fileIndex++;
         if (fileIndex < startIndex) continue;
         if (m_AddFileToPacket(writer, element)) nfiles++;
         LastFilePublished++;
         if (nfiles >= 200) break; //TODO: check server soft limits
     }
     header.Packetlength = (uint)writer.BaseStream.Length - header.Packetlength + 1;
     writer.Seek(0, SeekOrigin.Begin);
     header.Serialize(writer);
     writer.Write(nfiles);
     CLog.Log(Types.Constants.Log.Info, "FIL_PUBLISHED", nfiles);
 }