コード例 #1
0
        public bool FileExists(StorageFile file)
        {
            if (FileMap.SafeContainsKey(file.HashID) &&
                File.Exists(GetFilePath(file.HashID)))
            {
                return(true);
            }

            return(false);
        }
コード例 #2
0
ファイル: PlanService.cs プロジェクト: nandub/DeOps
        public PlanService(OpCore core)
        {
            Core     = core;
            Network  = core.Network;
            Protocol = Network.Protocol;
            Store    = Network.Store;
            Trust    = Core.Trust;

            if (Core.Sim != null)
            {
                SaveInterval = 30;
            }

            Core.SecondTimerEvent += Core_SecondTimer;

            Cache = new VersionedCache(Network, ServiceID, DataTypeFile, false);

            Cache.FileAquired += new FileAquiredHandler(Cache_FileAquired);
            Cache.FileRemoved += new FileRemovedHandler(Cache_FileRemoved);
            Cache.Load();

            if (!PlanMap.SafeContainsKey(Core.UserID))
            {
                LocalPlan = new OpPlan(new OpVersionedFile(Core.User.Settings.KeyPublic));
                LocalPlan.Init();
                LocalPlan.Loaded = true;
                PlanMap.SafeAdd(Core.UserID, LocalPlan);
            }
        }
コード例 #3
0
        public BuddyService(OpCore core)
        {
            Core         = core;
            Network      = Core.Network;
            Core.Buddies = this;

            Network.CoreStatusChange  += new StatusChange(Network_StatusChange);
            Core.KeepDataCore         += new KeepDataHandler(Core_KeepData);
            Core.Locations.KnowOnline += new KnowOnlineHandler(Location_KnowOnline);
            Core.MinuteTimerEvent     += Core_MinuteTimer;
            Cache = new VersionedCache(Network, ServiceID, 0, false);

            Cache.FileAquired += new FileAquiredHandler(Cache_FileAquired);
            Cache.Load();

            if (!BuddyList.SafeContainsKey(Core.UserID))
            {
                AddBuddy(Core.User.Settings.UserName, Core.User.Settings.KeyPublic);
            }

            BuddyList.SafeTryGetValue(Core.UserID, out LocalBuddy);
        }
コード例 #4
0
        public ProfileService(OpCore core)
        {
            Core     = core;
            Network  = core.Network;
            Protocol = Network.Protocol;
            Store    = Network.Store;
            Trust    = Core.Trust;

            ExtractPath = Core.User.RootPath + Path.DirectorySeparatorChar +
                          "Data" + Path.DirectorySeparatorChar +
                          ServiceID.ToString() + Path.DirectorySeparatorChar +
                          DataTypeExtracted.ToString();

            Cache = new VersionedCache(Network, ServiceID, DataTypeFile, false);

            Cache.FileAquired += new FileAquiredHandler(Cache_FileAquired);
            Cache.FileRemoved += new FileRemovedHandler(Cache_FileRemoved);
            Cache.Load();

            if (!ProfileMap.SafeContainsKey(Core.UserID))
            {
                SaveLocal(DefaultTemplate, null, null);
            }
        }
コード例 #5
0
ファイル: OpCore.cs プロジェクト: nandub/DeOps
        public void SecondTimer()
        {
            if (InvokeRequired)
            {
                RunTimer = true;
                ProcessEvent.Set();
                return;
            }

            try
            {
                // networks
                Network.SecondTimer();

                if (SecondTimerEvent != null)
                {
                    SecondTimerEvent.Invoke();
                }

                // service bandwidth
                foreach (BandwidthLog buffer in ServiceBandwidth.Values)
                {
                    buffer.NextSecond();
                }

                // before minute timer give gui 2 secs to tell us of nodes it doesnt want removed
                if (KeepDataCore != null && MinuteCounter == 58)
                {
                    KeepData.SafeClear();

                    KeepDataCore.Invoke();
                    RunInGuiThread(KeepDataGui);
                }


                MinuteCounter++;

                if (MinuteCounter == 60)
                {
                    MinuteCounter = 0;

                    if (MinuteTimerEvent != null)
                    {
                        MinuteTimerEvent.Invoke();
                    }

                    // prune keys from keymap - dont remove focused, remove furthest first
                    if (KeyMap.Count > KeyMax)
                    {
                        foreach (ulong user in (from id in KeyMap.Keys
                                                where !KeepData.SafeContainsKey(id) &&
                                                !Network.RudpControl.SessionMap.Values.Any(socket => socket.UserID == id) &&
                                                !Network.TcpControl.SocketList.Any(socket => socket.UserID == id)
                                                orderby Network.Local.UserID ^ id descending
                                                select id).Take(KeyMap.Count - KeyMax).ToArray())
                        {
                            KeyMap.Remove(user);
                            if (NameMap.SafeContainsKey(user))
                            {
                                NameMap.SafeRemove(user);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ConsoleLog("Exception OpCore::SecondTimer_Tick: " + ex.Message);
            }
        }
コード例 #6
0
ファイル: InternetSim.cs プロジェクト: nandub/DeOps
        public int SendPacket(SimPacketType type, DhtNetwork network, byte[] packet, System.Net.IPEndPoint target, TcpConnect tcp)
        {
            if (type == SimPacketType.Tcp)
            {
                if (!TcpEndPoints.ContainsKey(target))
                {
                    //this is what actually happens -> throw new Exception("Disconnected");
                    return(-1);
                }
            }

            if (!UdpEndPoints.ContainsKey(target) ||
                !SimMap.ContainsKey(target.Address) ||
                !SimMap.ContainsKey(network.Core.Sim.RealIP))
            {
                return(0);
            }

            DhtNetwork targetNet = (type == SimPacketType.Tcp) ? TcpEndPoints[target] : UdpEndPoints[target];

            if (network.IsLookup != targetNet.IsLookup)
            {
                Debug.Assert(false);
            }

            IPEndPoint source = new IPEndPoint(network.Core.Sim.RealIP, 0);

            source.Port = (type == SimPacketType.Udp) ? network.UdpControl.ListenPort : network.TcpControl.ListenPort;

            SimInstance sourceInstance = SimMap[source.Address];
            SimInstance destInstance   = SimMap[target.Address];

            if (packet != null)
            {
                sourceInstance.BytesSent += (ulong)packet.Length;
            }

            // tcp connection must be present to send tcp
            if (type == SimPacketType.Tcp)
            {
                if (!TcpSourcetoDest.SafeContainsKey(tcp))
                {
                    //this is what actually happens -> throw new Exception("Disconnected");
                    return(-1);
                }
            }

            // add destination to nat table
            if (type == SimPacketType.Udp && sourceInstance.RealFirewall == FirewallType.NAT)
            {
                sourceInstance.NatTable[target] = true;
            }

            // if destination blocked drop udp / tcp connect requests
            if (destInstance.RealFirewall == FirewallType.Blocked)
            {
                if (type == SimPacketType.Udp || type == SimPacketType.TcpConnect)
                {
                    return(0);
                }
            }

            // if destination natted drop udp (unless in nat table) / tcp connect requests
            else if (destInstance.RealFirewall == FirewallType.NAT)
            {
                if (type == SimPacketType.TcpConnect)
                {
                    return(0);
                }

                if (type == SimPacketType.Udp && !destInstance.NatTable.ContainsKey(source))
                {
                    return(0);
                }
            }

            // randomly test tcp send buffer full
            if (TestTcpFullBuffer)
            {
                if (type == SimPacketType.Tcp && packet.Length > 4 && RndGen.Next(2) == 1)
                {
                    int    newlength = packet.Length / 2;
                    byte[] newpacket = new byte[newlength];
                    Buffer.BlockCopy(packet, 0, newpacket, 0, newlength);
                    packet = newpacket;
                }
            }

            if (packet != null && packet.Length == 0)
            {
                Debug.Assert(false, "Empty Packet");
            }

            int index = destInstance.ThreadIndex;

            lock (OutPackets[index])
                OutPackets[index].Add(new SimPacket(type, source, packet, targetNet, tcp, network.Local.UserID));

            if (packet == null)
            {
                return(0);
            }

            return(packet.Length);
        }