Author: alanmc
Date: 2008-01-28 20:18:54 -0500 (Mon, 28 Jan 2008)
New Revision: 94220
Modified:
trunk/bitsharp/src/MonoTorrent/Client/ClientEngine.cs
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/IConnectionListener.cs
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/SocketListener.cs
trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
trunk/bitsharp/src/MonoTorrent/Client/Managers/ListenManager.cs
trunk/bitsharp/src/SampleClient/TestManualConnection.cs
trunk/bitsharp/src/SampleClient/main.cs
Log:
Hotness! The new manual connection adding API works :)
Modified: trunk/bitsharp/src/MonoTorrent/Client/ClientEngine.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/ClientEngine.cs 2008-01-29
01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/MonoTorrent/Client/ClientEngine.cs 2008-01-29
01:18:54 UTC (rev 94220)
@@ -50,6 +50,7 @@
/// </summary>
public class ClientEngine : IDisposable
{
+ private static Random random = new Random();
#region Global Constants
public static readonly bool SupportsFastPeer = true;
@@ -276,11 +277,11 @@
private static string GeneratePeerId()
{
StringBuilder sb = new StringBuilder(20);
- Random rand = new
Random((int)DateTime.Now.TimeOfDay.TotalMilliseconds);
sb.Append(Common.VersionInfo.ClientVersion);
- for (int i = 0; i < 12; i++)
- sb.Append(rand.Next(0, 9));
+ lock (random)
+ for (int i = 0; i < 12; i++)
+ sb.Append(random.Next(0, 9));
return sb.ToString();
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/IConnectionListener.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/IConnectionListener.cs
2008-01-29 01:11:57 UTC (rev 94219)
+++
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/IConnectionListener.cs
2008-01-29 01:18:54 UTC (rev 94220)
@@ -55,9 +55,9 @@
public abstract void Start();
public abstract void Stop();
- protected internal virtual void RaiseConnectionReceived(Peer peer,
IConnection connection, TorrentManager manager, bool overridePeerId)
+ protected internal virtual void RaiseConnectionReceived(Peer peer,
IConnection connection, TorrentManager manager)
{
- ConnectionReceived(this, new NewConnectionEventArgs(peer,
connection, manager, overridePeerId));
+ ConnectionReceived(this, new NewConnectionEventArgs(peer,
connection, manager));
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/SocketListener.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/SocketListener.cs
2008-01-29 01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/MonoTorrent/Client/ConnectionListeners/SocketListener.cs
2008-01-29 01:18:54 UTC (rev 94220)
@@ -157,7 +157,7 @@
IConnection connection = new
TCPConnection(peerSocket, true);
- RaiseConnectionReceived(peer, connection, null, false);
+ RaiseConnectionReceived(peer, connection, null);
}
catch (SocketException)
{
Modified:
trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
2008-01-29 01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
2008-01-29 01:18:54 UTC (rev 94220)
@@ -14,23 +14,17 @@
get { return connection; }
}
- public bool OverridePeerId
- {
- get { return overridePeerId; }
- }
-
public Peer Peer
{
get { return peer; }
}
- public NewConnectionEventArgs(Peer peer, IConnection connection,
TorrentManager manager, bool overridePeerId)
+ public NewConnectionEventArgs(Peer peer, IConnection connection,
TorrentManager manager)
: base(manager)
{
if (!connection.IsIncoming && manager == null)
throw new InvalidOperationException("An outgoing connection
must specify the torrent manager it belongs to");
- this.overridePeerId = overridePeerId;
this.connection = connection;
this.peer = peer;
}
Modified: trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
2008-01-29 01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
2008-01-29 01:18:54 UTC (rev 94220)
@@ -296,7 +296,7 @@
System.Threading.Interlocked.Increment(ref
this.openConnections);
// Create a handshake message to send to the peer
- HandshakeMessage handshake = new
HandshakeMessage(id.TorrentManager.Torrent.InfoHash, id.Peer.PeerId ??
engine.PeerId, VersionInfo.ProtocolStringV100);
+ HandshakeMessage handshake = new
HandshakeMessage(id.TorrentManager.Torrent.InfoHash, engine.PeerId,
VersionInfo.ProtocolStringV100);
if (id.Connection.Encryptor is NoEncryption ||
!ClientEngine.SupportsEncryption)
{
Modified: trunk/bitsharp/src/MonoTorrent/Client/Managers/ListenManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Managers/ListenManager.cs
2008-01-29 01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/MonoTorrent/Client/Managers/ListenManager.cs
2008-01-29 01:18:54 UTC (rev 94220)
@@ -123,9 +123,6 @@
id.Connection = new PeerConnectionBase(0, new NoEncryption());
id.Connection.Connection = e.Connection;
- if (!e.OverridePeerId)
- e.Peer.PeerId = null;
-
Logger.Log(id, "CE Peer incoming connection accepted");
if (id.Connection.Connection.IsIncoming)
@@ -215,7 +212,7 @@
ClientEngine.BufferManager.FreeBuffer(ref
id.Connection.recieveBuffer);
id.Connection.ClientApp = new Software(handshake.PeerId);
- handshake = new
HandshakeMessage(id.TorrentManager.Torrent.InfoHash, id.Peer.PeerId ??
engine.PeerId, VersionInfo.ProtocolStringV100);
+ handshake = new
HandshakeMessage(id.TorrentManager.Torrent.InfoHash, engine.PeerId,
VersionInfo.ProtocolStringV100);
BitfieldMessage bf = new
BitfieldMessage(id.TorrentManager.Bitfield);
ClientEngine.BufferManager.GetBuffer(ref id.Connection.sendBuffer,
handshake.ByteLength + bf.ByteLength);
Modified: trunk/bitsharp/src/SampleClient/TestManualConnection.cs
===================================================================
--- trunk/bitsharp/src/SampleClient/TestManualConnection.cs 2008-01-29
01:11:57 UTC (rev 94219)
+++ trunk/bitsharp/src/SampleClient/TestManualConnection.cs 2008-01-29
01:18:54 UTC (rev 94220)
@@ -12,15 +12,19 @@
{
public class CustomConnection : IConnection
{
- #region IConnection Members
+ private string name;
private Socket s;
private bool incoming;
- public CustomConnection(Socket s, bool incoming)
+ public CustomConnection(Socket s, bool incoming, string name)
{
+ this.name = name;
this.s = s;
this.incoming = incoming;
}
-
+ public override string ToString()
+ {
+ return name;
+ }
public byte[] AddressBytes
{
get { return
((IPEndPoint)s.RemoteEndPoint).Address.GetAddressBytes(); }
@@ -63,6 +67,7 @@
public int EndReceive(IAsyncResult result)
{
+ Console.WriteLine("{0} - {1}", name, "received");
return s.EndReceive(result);
}
@@ -73,22 +78,17 @@
public int EndSend(IAsyncResult result)
{
+ Console.WriteLine("{0} - {1}", name, "sent");
return s.EndSend(result);
}
- #endregion
-
- #region IDisposable Members
-
public void Dispose()
{
s.Close();
}
-
- #endregion
}
- public class CustomListner : ConnectionListenerBase
+ public class CustomListener : ConnectionListenerBase
{
public override void Dispose()
{
@@ -108,36 +108,77 @@
public void Add(TorrentManager manager, IConnection connection)
{
MonoTorrent.Client.Peer p = new MonoTorrent.Client.Peer("", new
Uri("tcp://12.123.123.1:2342"), new NoEncryption());
- base.RaiseConnectionReceived(p, connection, manager, true);
+ base.RaiseConnectionReceived(p, connection, manager);
}
}
class TestManualConnection
{
+ ClientEngine engine1;
+ ClientEngine engine2;
+ TorrentManager manager1;
+ TorrentManager manager2;
+ IConnection connection1a;
+ IConnection connection1b;
+ //IConnection connection2a;
+ //IConnection connection2b;
+ CustomListener listener1;
+ CustomListener listener2;
+ Torrent torrent;
+
+ Socket s1a = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
+ Socket s1b = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
+
+ //Socket s2a = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
+ //Socket s2b = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
+
public TestManualConnection()
{
- CustomListner listener = new CustomListner();
- ClientEngine engine = new
ClientEngine(EngineSettings.DefaultSettings(), listener);
- Torrent t = Torrent.Load(CreateTorrent());
- TorrentManager m = new TorrentManager(t, "",
TorrentSettings.DefaultSettings());
- engine.Register(m);
- engine.ConnectionManager.PeerMessageTransferred += delegate(object
sender, PeerMessageEventArgs e) { Console.WriteLine(e.Message.ToString()); };
- m.Start();
+ listener1 = new CustomListener();
+ listener2 = new CustomListener();
+ engine1 = new ClientEngine(EngineSettings.DefaultSettings(),
listener1);
+ engine2 = new ClientEngine(EngineSettings.DefaultSettings(),
listener2);
+
+ torrent = Torrent.Load("Torrents/untitled.bmp.torrent");
+ manager1 = new TorrentManager(torrent, "Downloads",
TorrentSettings.DefaultSettings());
+ manager2 = new TorrentManager(torrent, "Downloads2",
TorrentSettings.DefaultSettings());
+
+ engine1.Register(manager1);
+ engine2.Register(manager2);
+
+ //engine1.ConnectionManager.PeerMessageTransferred +=
delegate(object sender, PeerMessageEventArgs e) {
Console.WriteLine(e.Message.ToString()); };
+ //engine2.ConnectionManager.PeerMessageTransferred +=
delegate(object sender, PeerMessageEventArgs e) {
Console.WriteLine(e.Message.ToString()); };
+
+ manager1.Start();
+ manager2.Start();
+
TcpListener socketListener = new TcpListener(1220);
socketListener.Start();
- s1.Connect(IPAddress.Loopback, 1220);
- s2 = socketListener.AcceptSocket();
+ s1a.Connect(IPAddress.Loopback, 1220);
+ s1b = socketListener.AcceptSocket();
- CustomConnection c1 = new CustomConnection(s1, true);
- CustomConnection c2 = new CustomConnection(s2, false);
- listener.Add(m, c1);
- listener.Add(m, c2);
+ //s2a.Connect(IPAddress.Loopback, 1220);
+ //s2b = socketListener.AcceptSocket();
+
+ connection1a = new CustomConnection(s1a, true, "1A");
+ connection1b = new CustomConnection(s1b, false, "1B");
+
+ //connection2a = new CustomConnection(s2a, true, "2A");
+ //connection2b = new CustomConnection(s2b, false, "2B");
+
+ listener1.Add(manager1, connection1a);
+ //listener1.Add(manager1, connection2a);
+ listener2.Add(manager2, connection1b);
+ //listener2.Add(manager2, connection2b);
+
while (true)
{
- Console.WriteLine("c1 active: {0}", c1.Connected);
- Console.WriteLine("c2 active: {0}", c2.Connected);
+ Console.WriteLine("Connection 1A active: {0}",
connection1a.Connected);
+ //Console.WriteLine("Connection 1B active: {0}",
connection2a.Connected);
+ Console.WriteLine("Connection 2A active: {0}",
connection1b.Connected);
+ //Console.WriteLine("Connection 2B active: {0}",
connection2b.Connected);
System.Threading.Thread.Sleep(1000);
}
}
@@ -162,8 +203,7 @@
return dict;
}
- Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
- Socket s2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
+
}
}
Modified: trunk/bitsharp/src/SampleClient/main.cs
===================================================================
--- trunk/bitsharp/src/SampleClient/main.cs 2008-01-29 01:11:57 UTC (rev
94219)
+++ trunk/bitsharp/src/SampleClient/main.cs 2008-01-29 01:18:54 UTC (rev
94220)
@@ -27,7 +27,7 @@
static void Main(string[] args)
{
-// new SampleClient.TestManualConnection();
+ new SampleClient.TestManualConnection();
/* Generate the paths to the folder we will save
.torrent files to and where we download files to */
basePath = Environment.CurrentDirectory;
// This is the directory we are currently in
torrentsPath = Path.Combine(basePath, "Torrents");
// This is the directory we will save .torrents to
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches