Example #1
0
        private void Purge()
        {
            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.PeerDataTable peers = db.Peer;

            string query = String.Format("Expires <= #{0}#",
                                         DateTime.Now);

            SiderisDataSet.PeerRow[] rows = peers.Select(query)
                                            as SiderisDataSet.PeerRow[];

            if (rows.Length == 0)
            {
                return;
            }

            lock (db)
            {
                foreach (SiderisDataSet.PeerRow row in rows)
                {
                    row.Delete();
                }
                peers.AcceptChanges();
            }
        }
Example #2
0
        public bool Unregister(int port)
        {
            Purge();

            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.PeerDataTable peers = db.Peer;
            SiderisDataSet.PeerRow       peer;

            //
            // Find the peer in the database, then delete it.
            // Shared files are deleted by the foreign key
            // constraint.
            //
            peer = FindPeer(port);
            if (peer != null)
            {
                lock (db)
                {
                    peer.Delete();
                    peers.AcceptChanges();
                }
                return(true);
            }

            //
            // The peer was not in the database anyway.
            //
            return(false);
        }
Example #3
0
        public bool Ping(int port, out DateTime expires)
        {
            Purge();

            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.PeerDataTable peers = db.Peer;
            SiderisDataSet.PeerRow       peer;

            //
            // Find the peer in the database, then update
            // the expiry time.
            //
            peer = FindPeer(port);
            if (peer != null)
            {
                expires = DateTime.Now + TimeSpan.FromMinutes(15);
                lock (db)
                {
                    peer.Expires = expires;
                    peers.AcceptChanges();
                }
                return(true);
            }

            //
            // The peer was not in the database anyway.
            //
            expires = DateTime.Now;
            return(false);
        }
Example #4
0
 public SiderisService()
 {
     if (Application[database] == null)
     {
         lock (database)
         {
             Application[database] = new SiderisDataSet();
         }
     }
 }
Example #5
0
        private SiderisDataSet.PeerRow FindPeer(int port)
        {
            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.PeerDataTable peers = db.Peer;

            string address = GetPeerAddress(port);

            return(peers.FindByAddress(address));
        }
Example #6
0
        public bool Register(string name, ushort port, File[] shares, out DateTime expires)
        {
            Purge();

            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.PeerDataTable peers = db.Peer;
            SiderisDataSet.FileDataTable files = db.File;
            SiderisDataSet.PeerRow       peer;

            //
            // If this peer was already in the database,
            // remove it. Shared files are removed by the
            // foreign key constraint.
            //
            peer = FindPeer(port);
            if (peer != null)
            {
                lock (db)
                {
                    peer.Delete();
                    peers.AcceptChanges();
                }
            }

            //
            // Compute an expiry date and time for the peer,
            // and add it to the database.
            //
            expires = DateTime.Now + TimeSpan.FromMinutes(15);
            string address = GetPeerAddress(port);

            lock (db)
            {
                peer = peers.AddPeerRow(address, expires, name);

                //
                // Add the files shared by the peer to the database.
                //
                foreach (File file in shares)
                {
                    files.AddFileRow(peer, file.Hash, file.Size,
                                     file.Name);
                }

                db.AcceptChanges();
            }

            SaveData();

            return(true);
        }
Example #7
0
 private void SaveData()
 {
     if (Application[database] != null)
     {
         lock (database)
         {
             SiderisDataSet db = Application[database]
                                 as SiderisDataSet;
             string path = Server.MapPath("~/App_Data/SiderisDB.xml");
             db.WriteXml(path);
         }
     }
 }
Example #8
0
        private File[] SelectFiles(string query)
        {
            Purge();

            SiderisDataSet db = Application[database] as SiderisDataSet;

            SiderisDataSet.FileDataTable files = db.File;
            SiderisDataSet.FileRow[]     rows;

            rows = files.Select(query) as SiderisDataSet.FileRow[];
            File[] result = new File[rows.Length];
            for (int i = 0; i < rows.Length; i++)
            {
                result[i]          = new File();
                result[i].Name     = rows[i].Name;
                result[i].Hash     = rows[i].Hash;
                result[i].Size     = rows[i].Size;
                result[i].Peer     = rows[i].PeerRow.Address;
                result[i].PeerName = rows[i].PeerRow.Name;
            }

            return(result);
        }