private void ProcessPeers() { if (Interlocked.Exchange(ref _isProcessPeers, 1) == 1) { return; } foreach (var peer in Peers.OrderByDescending(x => x.Value.PiecesRequiredAvailable)) { if (DateTime.UtcNow > peer.Value.LastActive.Add(PeerTimeout)) { peer.Value.Disconnect(); continue; } if (!peer.Value.IsHandshakeSent || !peer.Value.IsHandshakeReceived) { continue; } if (Torrent.IsCompleted) { peer.Value.SendNotInterested(); } else { peer.Value.SendInterested(); } if (peer.Value.IsCompleted && Torrent.IsCompleted) { peer.Value.Disconnect(); continue; } peer.Value.SendKeepAlive(); // let them leech if (Torrent.IsStarted && Leechers.Count < MaxLeechers) { if (peer.Value.IsInterestedReceived && peer.Value.IsChokeSent) { peer.Value.SendUnchoke(); } } // ask to leech if (!Torrent.IsCompleted && Seeders.Count <= MaxSeeders) { if (!peer.Value.IsChokeReceived) { Seeders.TryAdd(peer.Key, peer.Value); } } } Interlocked.Exchange(ref _isProcessPeers, 0); }
public override int GetHashCode() { return(ProvideBufLen.GetHashCode() + Wantlist.GetHashCode() + Peers.GetHashCode() + BlocksReceived.GetHashCode() + DupBlksReceived.GetHashCode() + DupDataReceived.GetHashCode()); }
public void SendPlaySound(Vector3?position, MySoundCuesEnum id) { var msg = new MyEventPlaySound(); msg.Position = position; msg.SoundEnum = (int)id; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered); }
public void SendSetActorFaction(MyActorEnum actor, MyMwcObjectBuilder_FactionEnum faction) { var msg = new MyEventSetActorFaction(); msg.ActorId = (int)actor; msg.Faction = faction; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered); }
public void RequestFaction(MyMwcObjectBuilder_FactionEnum preferredFaction) { Log("Choose faction"); var msg = new MyEventChooseFaction(); msg.PreferredFaction = preferredFaction; Peers.SendHost(ref msg); }
private double GetPieceRarity(int index) { if (Peers.Count < 1) { return(0.0); } return(Peers.Average(x => x.Value.IsPieceDownloaded[index] ? 0.0 : 1.0)); }
private void OnPeerDisconnected(PeerDisconnected data) { Notifications.Enqueue(new PeerDisconnectedNotification(data.Peer)); Peers.Remove(data.Peer); Remotes.Remove(data.Remote); DataMap?.Handle(data); Sender?.Remove(data.Peer); }
public void SendMessageToPeer(Message message, EndPoint address) { var peerReciever = Peers.FirstOrDefault(peer => peer.Address.Equals(address)); if (peerReciever != null) { peerReciever.SendMessage(message); } }
public void CreateOverlay() { if (this.Peers.Count == 0) { //create overlay SP first Nod superPeer = new Nod(0, 0, true); Peers.Add(superPeer); LastNode = superPeer; } }
public void LeaveOverlay(Nod node) { if (node.IsSuperPeer) { Console.WriteLine("Not implemented"); } UpdateAllNeihhbours(node); Peers.Remove(Peers.Single(x => x.Id == node.Id)); }
public void SpeacialWeaponEvent(MySpecialWeaponEventEnum eventType, MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon) { MyEventSpeacialWeapon msg = new MyEventSpeacialWeapon(); msg.ShipEntityId = MySession.PlayerShip.EntityId.Value.NumericValue; msg.Weapon = weapon; msg.WeaponEvent = eventType; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered); }
public void DisconnectFromServer() { new Task(() => { IsDisconnecting = true; var task = Conductor.Instance.DisconnectFromServer(); }).Start(); Peers?.Clear(); }
public void SendEvent(Vector3 position, MyGlobalEventEnum eventType, int seed, Vector3 up, Vector3 forward) { var msg = new MyEventEvent(); msg.Position = new MyMwcPositionAndOrientation(position, forward, up); msg.EventTypeEnum = (int)eventType; msg.Seed = seed; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered); }
public void NewEntity(MyMwcObjectBuilder_Base objectBuilder, Matrix matrix) { Debug.Assert(objectBuilder.EntityId.HasValue, "EntityId must be set"); var msg = new MyEventNewEntity(); msg.ObjectBuilder = objectBuilder; msg.Position = new MyMwcPositionAndOrientation(matrix); Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered, 0, DEFAULT_LARGE_MESSAGE_SIZE); }
public PeerApiModel AddNewlyConnectedPeer(PeerApiModel p) { if (!IsPeerExists(p.Url)) { Peer peer = new Peer(p.Url, p.Name); Peers.Add(peer); } return(PeerApiModel.FromPeer(Current)); }
protected virtual void RemovePeer(string id) { if (id == null) { return; } PeerState removed; Peers.TryRemove(id, out removed); }
private static async void Peer_OnDisconnect(object sender, uint e) { ENetPeer peer = sender as ENetPeer; Console.WriteLine("Peer disconnected"); await peer.SendLeave(); peer.Data = null; Peers.Remove(peer); }
private void OnPeerConnected(PeerConnected data) { Notifications.Enqueue(new PeerConnectedNotification(data.Peer)); Peers.Add(data.Peer); DataMap?.Handle(data); Sender?.Add(data.Peer, data.Connection); Receiver?.StartProcessing(data.Peer, data.Connection); }
public void RemovePeer(Guid address) { var peer = Peers.Where(p => p.Address == address).FirstOrDefault(); if (peer != null) { Peers.Remove(peer); EventHub.Publish_PeerLeaved(new BlockChainEventArgs(peer, peer)); } }
public void SendSetFactionRelation(MyMwcObjectBuilder_FactionEnum factionA, MyMwcObjectBuilder_FactionEnum factionB, float relation) { var msg = new MyEventSetFactionRelation(); msg.FactionA = factionA; msg.FactionB = factionB; msg.Relation = relation; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered); }
public void SendMissionProgress(MyMissionBase mission, MyMissionProgressType progressType, MyTextsWrapperEnum?messageEnum = null) { MyEventMissionProgress message = new MyEventMissionProgress(); message.MissionId = mission != null ? (int)mission.ID : (int?)null; message.ProgressType = progressType; message.MessageEnum = messageEnum.HasValue ? (int)messageEnum.Value : (int?)null; Peers.SendToAll(ref message, NetDeliveryMethod.ReliableOrdered); }
private void EventHub_Join(IrcClient client, IrcMessageEventArgs <JoinMessage> e) { var channel = Channels.GetChannel(e.IrcMessage.Channel); if (e.IrcMessage.Nick != User.Nick) { var user = Peers.GetUser(e.IrcMessage.Nick); channel.AddUser(user, string.Empty); } }
public Peer AddPeer(int computingPower) { //var peer = new Peer(computingPower, BlockChain.GetCopy()); var peer = new Peer(computingPower, BlockChain); Peers.Add(peer); EventHub.Publish_NewPeerConected(new BlockChainEventArgs(peer, peer)); Logger.LogInformation($"New Peer Connected :{peer.ToString()} Peers Count:{Peers.Count}"); return(peer); }
public void ExplodeAmmo(MyAmmoBase ammo) { // Explode only my missiles to prevent circullar SEND/RECEIVE if (IsControlledByMe(ammo)) { var msg = new MyEventAmmoExplosion(); msg.AmmoBaseEntityId = ammo.EntityId.Value.NumericValue; msg.Position = new MyMwcPositionAndOrientation(ammo.WorldMatrix); Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered); } }
public void SendSetEntityFaction(MyEntity entity, MyMwcObjectBuilder_FactionEnum faction) { Debug.Assert(entity.EntityId.HasValue, "Entity must have id"); var msg = new MyEventSetEntityFaction(); msg.Faction = faction; msg.EntityId = entity.EntityId.Value.NumericValue; Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered); }
public void ResetEntity(MyEntity entity) { Debug.Assert(entity.EntityId.HasValue); if (IsControlledByMe(entity)) { MyEventEntityReset msg = new MyEventEntityReset(); msg.EntityId = entity.EntityId.Value.NumericValue; Peers.SendToAll(ref msg); } }
/// <summary> /// Try lock entity and announce to other players (runs only on host) /// </summary> bool TryLockEntity(uint entityId, byte playerId, bool enable) { bool success = true; if (enable) { using (m_lockedEntitiesLock.AcquireExclusiveUsing()) { success = !m_lockedEntities.ContainsKey(entityId); if (success) { m_lockedEntities[entityId] = playerId; MyEntities.GetEntityById(entityId.ToEntityId()).OnClosing += m_unlockOnClosing; } } } else { using (m_lockedEntitiesLock.AcquireExclusiveUsing()) { success = m_lockedEntities.Remove(entityId); MyEntity entity; if (MyEntities.TryGetEntityById(entityId.ToEntityId(), out entity)) { entity.OnClosing -= m_unlockOnClosing; } } } if (success) { // Send lock to all MyEventLock response = new MyEventLock(); response.EntityId = entityId; response.LockType = enable ? MyLockEnum.LOCK : MyLockEnum.UNLOCK; Peers.SendToAll(ref response, NetDeliveryMethod.ReliableOrdered, 0); } if (enable) { // Send response to player MyPlayerRemote player; if (Peers.TryGetPlayer(playerId, out player)) { MyEventLockResult response = new MyEventLockResult(); response.EntityId = entityId; response.IsSuccess = success; Peers.NetworkClient.Send(ref response, player.Connection, NetDeliveryMethod.ReliableOrdered, 0); } } return(success); }
/// <summary> /// Register that a peer is dead /// </summary> /// <param name="peer">The peer to save as dead</param> public void PeerIsDead(IPAddress peer) { if (Vote != null) //Need to be checked as a peer might die before a person votes on this computer { Vote.SetPeerState(peer, PeerState.Dead); } else { Peers.Remove(peer); } }
private static void AddPeer(Peer peer) { Random rand = new Random(); peer.ConnectToPeer(1300); if (!Peers.TryAdd(rand.Next(), peer)) { peer.Disconnect(); } }
/// <summary> /// Removes a peer from the peer list /// </summary> /// <param name="Peer">The peer to remove</param> public void RemovePeer(P2pPeer Peer) { // Lock peer list to prevent race conditions lock (Peers) { // Stop this peer Peer.Stop(); // Remove this peer from our peer list Peers.RemoveAll(x => x == Peer); } }
private Peers GetColumnPeersForValueCell(Int32 column, Int32 row) { var peers = new Peers(); /* Backtrack until a SumCell is hit. */ var startRow = row; while (!(this._cells[column, --startRow] is SumCell)) ; peers.Sum = (this._cells[column, startRow] as SumCell).Down; /* Go forward until another SumCell or the edge of the puzzle's column is hit. */ while ((++startRow < this._height) && !(this._cells[column, startRow] is SumCell)) peers.Add(this._cells[column, startRow] as ValueCell); return peers; }
private Peers GetRowPeersForValueCell(Int32 column, Int32 row) { var peers = new Peers(); /* Backtrack until a SumCell is hit. */ var startColumn = column; while (!(this._cells[--startColumn, row] is SumCell)) ; peers.Sum = (this._cells[startColumn, row] as SumCell).Right; /* Go forward until another SumCell or the edge of the puzzle's row is hit. */ while ((++startColumn < this._width) && !(this._cells[startColumn, row] is SumCell)) peers.Add(this._cells[startColumn, row] as ValueCell); return peers; }