public static ChannelMessage CreateBroadcast(Atom value)
                {
                    var collection = new AtomCollection();

                    collection.Add(value);
                    return(new ChannelMessage {
                        Timestamp = Timestamp.Now,
                        Type = MessageType.Broadcast,
                        Content = null,
                        Data = collection,
                    });
                }
Exemple #2
0
        private Atom CreateBroadcastPacket(BroadcastGroup group, Atom packet)
        {
            var bcst = new AtomCollection();

            bcst.SetBcstFrom(PeerCast.SessionID);
            bcst.SetBcstGroup(group);
            bcst.SetBcstHops(0);
            bcst.SetBcstTTL(11);
            PCPVersion.SetBcstVersion(bcst);
            bcst.SetBcstChannelID(Channel.ChannelID);
            bcst.Add(packet);
            return(new Atom(Atom.PCP_BCST, bcst));
        }
Exemple #3
0
        /// <summary>
        /// 指定したパケットを含むブロードキャストパケットを作成します
        /// </summary>
        /// <param name="group">配送先グループ</param>
        /// <param name="packet">配送するパケット</param>
        /// <returns>作成したPCP_BCSTパケット</returns>
        public virtual Atom CreateBroadcastPacket(BroadcastGroup group, Atom packet)
        {
            var bcst = new AtomCollection();

            bcst.SetBcstFrom(PeerCast.SessionID);
            bcst.SetBcstGroup(group);
            bcst.SetBcstHops(0);
            bcst.SetBcstTTL(11);
            bcst.SetBcstVersion(PCP_VERSION);
            bcst.SetBcstVersionVP(PCP_VERSION_VP);
            bcst.SetBcstChannelID(Channel.ChannelID);
            bcst.Add(packet);
            return(new Atom(Atom.PCP_BCST, bcst));
        }
 /// <summary>
 /// 指定したパケットを含むブロードキャストパケットを作成します
 /// </summary>
 /// <param name="group">配送先グループ</param>
 /// <param name="packet">配送するパケット</param>
 /// <returns>作成したPCP_BCSTパケット</returns>
 private Atom CreateBroadcastPacket(BroadcastGroup group, Atom packet)
 {
     var bcst = new AtomCollection();
       bcst.SetBcstFrom(PeerCast.SessionID);
       bcst.SetBcstGroup(group);
       bcst.SetBcstHops(0);
       bcst.SetBcstTTL(11);
       PCPVersion.SetBcstVersion(bcst);
       bcst.SetBcstChannelID(Channel.ChannelID);
       bcst.Add(packet);
       return new Atom(Atom.PCP_BCST, bcst);
 }
 static public Atom ReadAtom(this Stream stream)
 {
   var header = stream.ReadBytes(8);
   var name = new ID4(header, 0);
   if (!BitConverter.IsLittleEndian) Array.Reverse(header, 4, 4);
   uint len = BitConverter.ToUInt32(header, 4);
   if ((len & 0x80000000U)!=0) {
     if ((len&0x7FFFFFFF)>1024) {
       throw new InvalidDataException("Atom has too many children");
     }
     var children = new AtomCollection();
     for (var i=0; i<(len&0x7FFFFFFF); i++) {
       children.Add(stream.ReadAtom());
     }
     return new Atom(name, children);
   }
   else {
     if (len>1024*1024) {
       throw new InvalidDataException("Atom length too long");
     }
     var value = stream.ReadBytes((int)len);
     return new Atom(name, value);
   }
 }
 static public async Task<Atom> ReadAtomAsync(this Stream stream, CancellationToken cancel_token)
 {
   var header = await stream.ReadBytesAsync(8, cancel_token);
   var name = new ID4(header, 0);
   if (!BitConverter.IsLittleEndian) Array.Reverse(header, 4, 4);
   uint len = BitConverter.ToUInt32(header, 4);
   if ((len & 0x80000000U)!=0) {
     if ((len&0x7FFFFFFF)>1024) {
       throw new InvalidDataException("Atom has too many children");
     }
     var children = new AtomCollection();
     for (var i=0; i<(len&0x7FFFFFFF); i++) {
       children.Add(await stream.ReadAtomAsync(cancel_token));
     }
     return new Atom(name, children);
   }
   else {
     if (len>1024*1024) {
       throw new InvalidDataException("Atom length too long");
     }
     var value = await stream.ReadBytesAsync((int)len, cancel_token);
     return new Atom(name, value);
   }
 }