private void _ClientHandlerStage2(Stream Stream) { using (ReaderWriter rw = new ReaderWriter(Stream)) { BooruUser user = _Booru.DefaultUser; while (_ThreadPool.IsRunning) { RequestCode requestCode = (RequestCode)rw.ReadUShort(); if (requestCode != RequestCode.Disconnect) { byte[] payload = rw.ReadBytes(); _Logger.LogLine("Client request: RQ = {0}, {1} bytes payload", Enum.GetName(typeof(RequestCode), requestCode), payload.Length); using (var inputMs = new MemoryStream(payload)) using (var outputMs = new MemoryStream()) { try { using (var rw2 = new ReaderWriter(inputMs, outputMs)) _ClientHandlerStage3((RequestCode)requestCode, rw2, ref user); rw.Write(true); rw.Write(outputMs.ToArray(), true); } catch (Exception ex) { _Logger.LogException("ClientRequest", ex); rw.Write(false); rw.Write(ex.Message, true); } rw.Flush(); } } else { _Logger.LogLine("Client disconnected gracefully"); break; } } } }