private void InsertNewPeer(Socket NewConnection) { //crea un nuovo peer con un socket già collegato e una nuova connessione con questo peer, e la inserisce nel contenitore mConnections CPeer newPeer = CPeer.CreatePeer(Convert.ToString((NewConnection.RemoteEndPoint as IPEndPoint).Address), (NewConnection.RemoteEndPoint as IPEndPoint).Port, NewConnection); mPeers.Insert(newPeer, true); }
static void Main(string[] args) { //List<CPeer> lp = GenPeersList(); List <CPeer> lp = new List <CPeer>(); lp.Add(CPeer.CreatePeer("100.100.100.100", 1)); CServer s = CServer.StartNewServer(lp); }
private void SendPeersList(CPeer Peer) { string PeersList = ""; for (int i = 0; i < mPeers.Length; i++) { if (mPeers[i] != null) { PeersList += mPeers[i].IP + "," + mPeers[i].Port + ";"; } } PeersList = PeersList.TrimEnd(';'); Peer.SendData(PeersList); }
public bool Insert(CPeer Peer, bool IsReserved = false) { //ritorna true se riesce ad inserire il peer, mentre false se il vettore è pieno o il peer è già presente nella lista lock (mPeers) //rimane loccato se ritorno prima della parentesi chiusa?? { //controlla che la connessione(e quindi il peer) non sia già presente foreach (CPeer p in mPeers) { if (p?.IP == Peer.IP)//e se ci sono più peer nella stessa rete che si collegano su porte diverse? { return(false); } } //controlla se è il peer che si è collegato a me o sono io che mi sono collegato al peer if (IsReserved) { for (int i = mPeers.Length - 1; i > 0; i--) { if (mPeers[i] == null) { mPeers[i] = Peer; return(true); } } } else { for (int i = 0; i < mNumReserved; i++) { if (mPeers[i] == null) { mPeers[i] = Peer; return(true); } } } return(false); } }
private static CPeer DeserializePeer(string Peer) { string[] peerField = Peer.Split(','); return(CPeer.CreatePeer(peerField[0], Convert.ToInt32(peerField[1]))); }