private void updateStatus(Payload payload, clientStatistics stats) { if (!taskPayLoad.ContainsKey(payload.clientId)) { return; } double load = (payload.cpuUsage + payload.memUsage) / 2; stats.Load = (stats.Load + load) / 2; stats.Name = payload.clientId; UpdateStatusEventArgs args = new UpdateStatusEventArgs(); args.ClientId = stats.Name; args.load = stats.Load; var e = updateStatusEvent; if (e != null) { e.Invoke(args); } }
private void processClient(object clientInfo) { TcpClient client = (TcpClient)clientInfo; NetworkStream networkStream = client.GetStream(); clientStatistics stats = new clientStatistics(clientList); Queue <Payload> payloadQueue = new Queue <Payload>(); string ClientID = "Not Registered"; lock (clientList) { clientList.Add(stats); clientList.Sort(); } while (true) { if (!client.Connected) { var e = DisconnectEvent; DisconnectEventArgs args = new DisconnectEventArgs(); args.ClientId = ClientID; if (e != null) { e.Invoke(args); } break; } while (networkStream.DataAvailable) { byte[] buffer = new byte[commUtil.payloadSize]; int readBytes = 0; readBytes = networkStream.Read(buffer, 0, commUtil.payloadSize); Payload output = null; if (readBytes == commUtil.payloadSize) { string serializedData = Encoding.UTF8.GetString(buffer); output = commUtil.preparePayload(serializedData); payloadQueue.Enqueue(output); } if (output != null && output.command != CommandType.STATUS) { Debug.Print("Receiving " + Enum.GetName(typeof(CommandType), output.command)); } } while (payloadQueue.Count != 0) { Payload payload = null; if (payloadQueue != null && payloadQueue.Count > 0) { payload = payloadQueue.Dequeue(); } switch (payload.command) { case CommandType.REQUEST: case CommandType.APPEND_REQUEST: sendToExecuteQueue(payload); break; case CommandType.RESULT: case CommandType.APPEND_RESULT: sendToResultQueue(payload); break; case CommandType.REGISTER_CLIENT: ClientID = doRegisterClient(payload, networkStream); break; case CommandType.REGISTER_ASSEMBLY: doRegisterAssembly(payload, networkStream); break; case CommandType.UPLOAD_ASSEMBLY: case CommandType.APPEND_ASSEMBLY: doSaveAssembly(payload); break; case CommandType.DOWNLOAD: doSendAssembly(payload, networkStream); break; case CommandType.DOWNLOAD_EXECUTE: doExecuteAfterSend(payload, networkStream); break; case CommandType.STATUS: updateStatus(payload, stats); break; } } //Console.WriteLine(payload.clientId + " " + payload.command + " " + payload.cpuUsage + " " + payload.memUsage); Thread.Sleep(150); } }