Exemple #1
0
        private void StartConsumerLoop(CancellationToken cancellationToken)
        {
            //subcribe duoc nhieu keu
            kafkaConsumer.Subscribe(Channels);

            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    var cr = this.kafkaConsumer.Consume(cancellationToken);
                    if (cr.Topic.Equals("REGISTER_FACE_RESPONSE"))
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("REGISTER_FACE_RESPONSE --- " + cr.Message.Value);
                        Console.ForegroundColor = ConsoleColor.White;
                        RegisterFace registerFace = new RegisterFace();
                        registerFace = JsonConvert.DeserializeObject <RegisterFace>(cr.Message.Value);
                        HandleTaskRegister.Action(registerFace.Record, registerFace);
                    }
                    if (cr.Topic.Equals("DETECT_FACE_RESPONSE"))
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("DETECT_FACE_RESPONSE --- " + cr.Message.Value);
                        Console.ForegroundColor = ConsoleColor.White;
                        DetectFace detectFace = new DetectFace();
                        detectFace = JsonConvert.DeserializeObject <DetectFace>(cr.Message.Value);
                        HandleTaskDetect.Action(detectFace.Record, detectFace);
                    }
                    if (cr.Topic.Equals("REMOVE_TOPIC_RESPONSE"))
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("REMOVE_TOPIC_RESPONSE --- " + cr.Message.Value);
                        Console.ForegroundColor = ConsoleColor.White;
                        DeleteFace deleteFace = new DeleteFace();
                        deleteFace = JsonConvert.DeserializeObject <DeleteFace>(cr.Message.Value);
                        HandleTaskDelete.Action(deleteFace.Id, deleteFace);
                    }
                }
                catch (OperationCanceledException)
                {
                    break;
                }
                catch (ConsumeException e)
                {
                    // Consumer errors should generally be ignored (or logged) unless fatal.
                    Console.WriteLine($"Consume error: {e.Error.Reason}");

                    if (e.Error.IsFatal)
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Unexpected error: {e}");
                    break;
                }
            }
        }
        public async Task OnSessionDataReceived(AsyncTcpServerSession session, byte[] data, int offset, int count)
        {
            if (data == null || data.Length <= 0)
            {
                return;
            }
            byte code = data[0];                      //功能码

            byte[] bytes = new byte[data.Length - 1]; //正文数据
            Array.Copy(data, 1, bytes, 0, bytes.Length);
            string unBase64txt = Encoding.UTF8.GetString(bytes);

            byte[] unBase64Bytes = Convert.FromBase64String(unBase64txt);   //bas64解码
            if (!code.Equals(CODE_HEARTBEAT))
            {
                Console.WriteLine($"功能码:{code.ToString()},数据{Encoding.UTF8.GetString(unBase64Bytes)}");
            }
            try
            {
                switch (code)
                {
                case CODE_FACEUPLOAD:       //名单上传
                {
                    string     upLoadFaceStr = Encoding.UTF8.GetString(unBase64Bytes);
                    UpLoadFace upLoadFace    = SerializeHelper.SerializeJsonToObject <UpLoadFace>(upLoadFaceStr);
                    byte[]     imgBytes      = Convert.FromBase64String(upLoadFace.imagebytes);
                    FileReadWriteHelper.WriteBytesToFile($@"D:\Test\{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.jpg", imgBytes);          //保存图片

                    ServerControl.GetInstance().faceList.Add(new FaceInfo()
                        {
                            filename     = upLoadFace.filename,
                            idnumber     = upLoadFace.idnumber,
                            imagebytes   = upLoadFace.imagebytes,
                            name         = upLoadFace.name,
                            sex          = upLoadFace.sex,
                            serialnumber = upLoadFace.serialnumber,
                            type         = upLoadFace.type
                        });
                    ServerControl.GetInstance().ServerSendMsg(CODE_FACEUPLOAD, new byte[] { SUCCESS });
                    Console.WriteLine($"名单上传成功,列表还有白名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("white")).Count()}个,和名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).Count()}个!");
                    break;
                }

                case CODE_FACESELECT:       //名单查询
                {
                    SelectFace selectFace = new SelectFace();
                    switch (unBase64Bytes[0])
                    {
                    case WHITEFACE:
                        selectFace.faceList = ServerControl.GetInstance().faceList.Where(p => p.type.Equals("white")).ToList();
                        break;

                    case BLACKFACE:
                        selectFace.faceList = ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).ToList();
                        break;

                    case ALLFACE:
                        selectFace.faceList = ServerControl.GetInstance().faceList;
                        break;
                    }
                    string jsonStr = SerializeHelper.SerializeObjectToJson(selectFace);
                    byte[] tBytes  = Encoding.UTF8.GetBytes(jsonStr);
                    ServerControl.GetInstance().ServerSendMsg(CODE_FACESELECT, tBytes);
                    Console.WriteLine($"名单查询成功,一共查到{selectFace.faceList.Count}个名单!");
                    break;
                }

                case CODE_FACEDELETE:       //名单删除
                {
                    string     deleteFaceStr = Encoding.UTF8.GetString(unBase64Bytes);
                    DeleteFace deleteFace    = SerializeHelper.SerializeJsonToObject <DeleteFace>(deleteFaceStr);

                    var dFace = ServerControl.GetInstance().faceList.Where(p => p.type.Equals(deleteFace.type) && p.serialnumber.Equals(deleteFace.serialnumber)).First();
                    ServerControl.GetInstance().faceList.Remove(dFace);

                    ServerControl.GetInstance().ServerSendMsg(CODE_FACEDELETE, new byte[] { SUCCESS });
                    Console.WriteLine($"名单删除成功,列表还有白名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("white")).Count()}个,和名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).Count()}个!");
                    break;
                }

                case CODE_FACECLEAR:        //名单清除
                {
                    List <FaceInfo> clList = new List <FaceInfo>();
                    switch (unBase64Bytes[0])
                    {
                    case WHITEFACE:
                        clList = ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).ToList();
                        break;

                    case BLACKFACE:
                        clList = ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).ToList();
                        break;

                    case ALLFACE:
                        clList = ServerControl.GetInstance().faceList;
                        break;
                    }
                    foreach (var item in clList)
                    {
                        ServerControl.GetInstance().faceList.Remove(item);
                    }

                    ServerControl.GetInstance().ServerSendMsg(CODE_FACECLEAR, new byte[] { SUCCESS });
                    Console.WriteLine($"名单清除成功,列表还有白名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("white")).Count()}个,和名单{ServerControl.GetInstance().faceList.Where(p => p.type.Equals("black")).Count()}个!");
                    break;
                }

                case CODE_FACCONTRAST:        //人脸对比
                {
                    switch (unBase64Bytes[0])
                    {
                    case START:
                        ServerControl.GetInstance().ServerSendMsg(CODE_FACCONTRAST, new byte[] { SUCCESS });
                        IsSend = false;
                        Console.WriteLine("启动人脸对比成功,抓图中。。。");
                        SendImg();
                        break;

                    case STOP:
                        ServerControl.GetInstance().ServerSendMsg(CODE_FACCONTRAST, new byte[] { STOPSUCCESS });
                        IsSend = false;
                        Console.WriteLine("关闭人脸对比成功!");
                        break;
                    }
                    break;
                }

                case CODE_FOLLOW:       //跟随
                {
                    switch (unBase64Bytes[0])
                    {
                    case START:
                        ServerControl.GetInstance().ServerSendMsg(CODE_FOLLOW, new byte[] { SUCCESS });
                        Console.WriteLine("启动跟随成功!");
                        break;

                    case STOP:
                        ServerControl.GetInstance().ServerSendMsg(CODE_FOLLOW, new byte[] { STOPSUCCESS });
                        Console.WriteLine("关闭跟随成功!");
                        break;

                    case RESTART:
                        ServerControl.GetInstance().ServerSendMsg(CODE_FOLLOW, new byte[] { RESTARTSUCCESS });
                        Console.WriteLine("重新跟随成功!");
                        break;
                    }
                    break;
                }

                case CODE_GETPOINT:     //获取黑体坐标
                {
                    BlackBodyPoint blackBodyPoint = new BlackBodyPoint()
                    {
                        xpoint = 55,
                        ypoint = 105
                    };
                    string jsonStr = SerializeHelper.SerializeObjectToJson(blackBodyPoint);
                    byte[] body    = Encoding.UTF8.GetBytes(jsonStr);
                    ServerControl.GetInstance().ServerSendMsg(CODE_SETPOINT, body);
                    Console.WriteLine("校准黑体坐标成功!");
                    break;
                }

                case CODE_FACEIDENTIFY:     //人脸识别
                    break;

                case CODE_FACEALARM:        //人脸报警
                    break;

                case CODE_HEARTBEAT:        //心跳
                    break;
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex);
                Console.WriteLine($"解析接收数据异常:{ex.ToString()}");
            }
        }