public bool FileExists(StorageFile file) { if (FileMap.SafeContainsKey(file.HashID) && File.Exists(GetFilePath(file.HashID))) { return(true); } return(false); }
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); } }
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); }
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); } }
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); } }
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); }