public void run () { var hashTypes = new Dictionary<String, HashType> (); hashTypes.Add ("MD5", HashType.MD5); hashTypes.Add ("SHA1", HashType.SHA1); while (!shutdown) { var request = RequestSock.ReceiveMessage (); if (request [0].ConvertToString () == "job") { var job = new Job () { Id = GetNewId (), Status = Status.QUEUED, Hash = request [1].ToByteArray (), Type = hashTypes [request [2].ConvertToString ()], MaxLength = request [3].ConvertToInt32 (), }; var keySpace = new List<String> (); for (int i = 4; i < request.FrameCount; i++) { keySpace.Add (request [i].ConvertToString ()); } job.KeySpace = keySpace.ToArray (); logger.Info ("Queue new job {0}: {1} hash: {2}", job.Id, job.Type, BitConverter.ToString (job.Hash).Replace ("-", "").ToLower ()); lock (Jobs) { Jobs.Add (job.Id, job); Monitor.PulseAll (Jobs); } var returned = new NetMQMessage (); returned.Append (job.Id); RequestSock.SendMessage (returned); } else if (request [0].ConvertToString () == "abort") { int id = request [1].ConvertToInt32 (); lock (Jobs) { if (Jobs [id].Status == Status.PROCESSING) { logger.Info ("Received request to abort job {0}", id); Jobs [id].Status = Status.ABORTED; Queuer.Abort (); } else { logger.Info ("Received request to abort job {0}, ignoring.", id); } } var msg2 = new NetMQMessage (); msg2.Append ("ok"); RequestSock.SendMessage (msg2); } else { logger.Error ("Invalid message: {0}", request [0].ToString ()); var msg2 = new NetMQMessage (); msg2.Append ("ok"); RequestSock.SendMessage (msg2); } } }
public void SendAck (Job job) { var msg = new NetMQMessage (); msg.Append ("ack"); msg.Append (job.Id); msg.Append (job.Status.ToString ()); msg.Append (job.Password == null ? "" : job.Password); ResponseSock.SendMessage (msg); }