Exemplo n.º 1
0
 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;
             }
         }
     }
 }