internal void RaisePeerMessageTransferred(PeerMessageEventArgs e) { if (PeerMessageTransferred == null) { return; } ThreadPool.QueueUserWorkItem(delegate { EventHandler <PeerMessageEventArgs> h = PeerMessageTransferred; if (h == null) { return; } if (!(e.Message is MessageBundle)) { h(e.TorrentManager, e); } else { // Message bundles are only a convience for internal usage! MessageBundle b = (MessageBundle)e.Message; foreach (PeerMessage message in b.Messages) { PeerMessageEventArgs args = new PeerMessageEventArgs(e.TorrentManager, message, e.Direction, e.ID); h(args.TorrentManager, args); } } }); }
private void MessageReceived(bool successful, PeerMessage message, object state) { PeerId id = (PeerId)state; if (!successful) { id.ConnectionManager.CleanupSocket(id, "Could not receive a message"); return; } try { PeerMessageEventArgs e = new PeerMessageEventArgs(id.TorrentManager, (PeerMessage)message, Direction.Incoming, id); id.ConnectionManager.RaisePeerMessageTransferred(e); message.Handle(id); id.LastMessageReceived = DateTime.Now; PeerIO.EnqueueReceiveMessage(id.Connection, id.Decryptor, id.TorrentManager.DownloadLimiter, id.Monitor, id.TorrentManager, messageReceivedCallback, id); } catch (TorrentException ex) { id.ConnectionManager.CleanupSocket(id, ex.Message); } }
private void MessageReceived(bool successful, PeerMessage message, object state) { PeerId id = (PeerId) state; if (!successful) { id.ConnectionManager.CleanupSocket (id, "Could not receive a message"); return; } try { PeerMessageEventArgs e = new PeerMessageEventArgs(id.TorrentManager, (PeerMessage)message, Direction.Incoming, id); id.ConnectionManager.RaisePeerMessageTransferred(e); message.Handle(id); id.LastMessageReceived = DateTime.Now; PeerIO.EnqueueReceiveMessage (id.Connection, id.Decryptor, id.TorrentManager.DownloadLimiter, id.Monitor, id.TorrentManager, messageReceivedCallback, id); } catch (TorrentException ex) { id.ConnectionManager.CleanupSocket (id, ex.Message); } }
internal void RaisePeerMessageTransferred(PeerMessageEventArgs e) { if (PeerMessageTransferred == null) return; ThreadPool.QueueUserWorkItem(delegate { EventHandler<PeerMessageEventArgs> h = PeerMessageTransferred; if (h == null) return; if (!(e.Message is MessageBundle)) { h(e.TorrentManager, e); } else { // Message bundles are only a convience for internal usage! MessageBundle b = (MessageBundle)e.Message; foreach (PeerMessage message in b.Messages) { PeerMessageEventArgs args = new PeerMessageEventArgs(e.TorrentManager, message, e.Direction, e.ID); h(args.TorrentManager, args); } } }); }
void HandlePeerMessageTransferred(object sender, PeerMessageEventArgs e) { if (e.Direction != Direction.Incoming) return; if (!(e.Message is MonoTorrent.Client.Messages.Standard.HaveMessage)) return; swarmSpeed.AddDelta (manager.Torrent.PieceLength); }
private static void ProcessMessage(PeerId id, ArraySegment<byte> buffer, int count) { string reason = ""; bool cleanUp = false; try { try { PeerMessage message = PeerMessage.DecodeMessage(buffer, 0, 4 + count, id.TorrentManager); // Fire the event to say we recieved a new message PeerMessageEventArgs e = new PeerMessageEventArgs(id.TorrentManager, (PeerMessage)message, Direction.Incoming, id); id.ConnectionManager.RaisePeerMessageTransferred(e); message.Handle(id); } catch (Exception ex) { // Should i nuke the peer with the dodgy message too? Logger.Log(null, "*CRITICAL EXCEPTION* - Error decoding message: {0}", ex); } finally { ClientEngine.BufferManager.FreeBuffer(ref buffer); } //FIXME: I thought i was using 5 (i changed the check below from 3 to 5)... // if the peer has sent us three bad pieces, we close the connection. if (id.Peer.TotalHashFails == 5) { reason = "5 hashfails"; Logger.Log(id.Connection, "ConnectionManager - 5 hashfails"); cleanUp = true; return; } id.LastMessageReceived = DateTime.Now; } catch (TorrentException ex) { reason = ex.Message; Logger.Log(id.Connection, "Invalid message recieved: {0}", ex.Message); cleanUp = true; return; } finally { if (cleanUp) id.ConnectionManager.CleanupSocket(id, reason); } }
private void OnPeerMessageTransferred(object sender, PeerMessageEventArgs args) { // FIXME: Swarm speed infinitely grows :S if(args.Direction != Direction.Incoming) return; if(!torrentSwarm.ContainsKey(args.TorrentManager)) torrentSwarm.Add(args.TorrentManager, 0); torrentSwarm[args.TorrentManager]++; }