using Articulate_Network; using Articulate_Network.Events; using Articulate_Network.Managers; using MIT_Packets; using MIT_Packets.Transfer; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; namespace MIT_Master_Server { class Program { static Server server; static FileInfo file = new FileInfo(@"D:\iPad_10.2_15.1_19B74_Restore.ipsw"); static int maxConcurrentTransfers = 5; static void Main(string[] args) { AnnouncePacket.Register(); server = new Server(); var watch = Stopwatch.StartNew(); server.Start("10.136.5.59", 50).ContinueWith(t => { watch.Stop(); Console.WriteLine(); Console.WriteLine($"Server listening on port 50, took {watch.ElapsedMilliseconds} ms"); }); server.ClientConnected += Server_ClientConnected; server.DataReceived += Server_DataReceived; Console.ReadLine(); } private static async void Server_DataReceived(object sender, Articulate_Network.Events.DataReceivedEventArgs e) { if (e.Packet is AnnouncePacket) { AnnouncePacket p = (AnnouncePacket)e.Packet; Console.WriteLine($"Received client announcement. Requesting config: {p.RequestConfig}"); Console.WriteLine(p.MacAddress); int packetsSent = 0; if (p.RequestConfig) { await server.SendPacket(e.Client, new StartFileTransferPacket() { FileName = file.FullName, ExpectedSize = file.Length }); byte[] buffer = new byte[10240]; using (var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read)) { int bytesRead; while ((bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length)) > 0) { await server.SendPacket(e.Client, new SendFileChunkPacket() { Chunk = buffer, ChunkSize = bytesRead }); packetsSent += 1; } } Console.WriteLine($"Completed file transfer. Sent {packetsSent} packets."); await server.SendPacket(e.Client, new EndFileTransferPacket() { Completed = true }); } } } private static async void Server_ClientConnected(object sender, ClientConnectedEventArgs e) { //Console.WriteLine($"Client Connected from: {(e.TcpClient.Client.RemoteEndPoint as IPEndPoint).Address}"); await server.SendPacket(e.TcpClient, new TestPacket() { TestOne = 50, TestTwo = true }); } } }