/// <summary> /// Receives file details. /// </summary> /// <param name="listenerState">TCP listener status.</param> /// <returns>Transmitted file, with installed file details.</returns> private TransmittedFile ReceiveFileDetails(ListenerState listenerState) { const int reservedСellSize = 8; const int startIndex = 0; long fileDetailsLength = BitConverter.ToInt64(listenerState.Buffer .Take(reservedСellSize).ToArray(), startIndex); byte[] fileDetails = listenerState.Buffer .Skip(reservedСellSize).Take((int)fileDetailsLength).ToArray(); listenerState.NeedToReceivedBytes = BitConverter.ToInt64(listenerState.Buffer .Skip(reservedСellSize + fileDetails.Length).ToArray(), startIndex); return(new TransmittedFile(fileDetails)); }
/// <summary> /// Accepts connections. Starts receiving a file. /// </summary> /// <param name="asyncResult">The result of the asynchronous operation.</param> private void AcceptConnection(IAsyncResult asyncResult) { _allDone.Set(); var listener = (Socket)asyncResult.AsyncState; var handler = listener.EndAccept(asyncResult); var listenerState = new ListenerState { WorkSocket = handler }; const int bufferOffset = 0; handler.BeginReceive(listenerState.Buffer, bufferOffset, ListenerState.BufferSize, SocketFlags.None, new AsyncCallback(EndReceive), listenerState); }