private void HandleAssincConnection(IAsyncResult result) { StreamReader reader; StreamWriter writer; string user, password, mime, uriFile; // accepted connection var listener = (TcpListener) result.AsyncState; var client = listener.EndAcceptTcpClient(result); _connectionHandler.Set(); var clientId = Guid.NewGuid(); Trace.Write("Accepted connection with ID " + clientId, "Information"); try { reader = new StreamReader(client.GetStream()); writer = new StreamWriter(client.GetStream()) {AutoFlush = true}; } catch (Exception) { Trace.WriteLine( "An error during initialization of reader and writer of connection: " + clientId + ". Closing comunication.", "Information"); client.Close(); return; } try { user = reader.ReadLine(); password = reader.ReadLine(); mime = reader.ReadLine(); uriFile = reader.ReadLine(); } catch (Exception) { Trace.WriteLine( "An error reading user, password, mime and uro file of connection: " + clientId + ". Closing comunication.", "Information"); client.Close(); return; } if (user == null || password == null || mime == null || uriFile == null) { Trace.WriteLine( "User or password or mime or uri file are null (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } // Trace.WriteLine("user: "******"Information"); // Trace.WriteLine("password: "******"Information"); // Trace.WriteLine("mime: " + mime, "Information"); // Trace.WriteLine("uri file: " + uriFile, "Information"); var datasource = new ServerDataSource(); if (!datasource.UserExists(user, password)) { writer.WriteLine("KO"); client.Close(); return; } writer.WriteLine("OK"); IList<BaseTool> processingTools = null; var numberOfTools = 0; try { processingTools = ToolsManifest.GetAvailableTools(mime); numberOfTools = processingTools.Count; } catch { Trace.WriteLine("Error getting available tools (connection: " + clientId + ")", "Information"); } try { //communicating the number of tools writer.WriteLine(numberOfTools); } catch (Exception) { Trace.WriteLine( "Error sending the number of tools to processed file (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } try { for (var i = 0; i < numberOfTools; ++i) writer.WriteLine(processingTools[i].ToString()); } catch (Exception) { Trace.WriteLine( "Error sending the tools to processed file (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } string operation; try { operation = reader.ReadLine(); } catch (Exception) { Trace.WriteLine("Error reading the operation (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } if (operation == null) { Trace.WriteLine("Error reading the operation (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } Trace.WriteLine("operazione da compiere: " + operation, "Information"); datasource.EnqueueProcessingRequest(new ProcessingMessage(uriFile, mime, operation)); var returnMessage = datasource.DequeueProcessingCompletion(); Trace.WriteLine("File uri: " + returnMessage.FileUri, "Information"); try { writer.WriteLine(returnMessage.FileUri); } catch (Exception) { Trace.WriteLine( "Error sending the uri of processed file (connection: " + clientId + "). Closing comunication.", "Information"); client.Close(); return; } client.Close(); }