Beispiel #1
0
 void onNotify(ImageMsg msg)
 {
     if (msg != null)
     {
         messageActionTable.fireMessageTrigger(msg);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Converts a byte array from BGR to RGB.
        /// </summary>
        static byte[] EncodingConversion(ImageMsg image, bool convertBGR = true, bool flipY = true)
        {
            // Number of channels in this encoding
            int channels = image.GetNumChannels();

            if (!image.EncodingRequiresBGRConversion())
            {
                convertBGR = false;
            }

            // If no modifications are necessary, return original array
            if (!convertBGR && !flipY)
            {
                return(image.data);
            }

            int channelStride = image.GetBytesPerChannel();
            int pixelStride   = channelStride * channels;
            int rowStride     = pixelStride * (int)image.width;

            if (flipY)
            {
                ReverseInBlocks(image.data, rowStride, (int)image.height);
            }

            if (convertBGR)
            {
                // given two channels, we swap R with G (distance = 1).
                // given three or more channels, we swap R with B (distance = 2).
                int swapDistance = channels == 2 ? channelStride : channelStride * 2;
                int dataLength   = (int)image.width * (int)image.height * pixelStride;

                if (channelStride == 1)
                {
                    // special case for the 1-byte-per-channel formats: avoid the inner loop
                    for (int pixelIndex = 0; pixelIndex < dataLength; pixelIndex += pixelStride)
                    {
                        int  swapB = pixelIndex + swapDistance;
                        byte temp  = image.data[pixelIndex];
                        image.data[pixelIndex] = image.data[swapB];
                        image.data[swapB]      = temp;
                    }
                }
                else
                {
                    for (int pixelIndex = 0; pixelIndex < dataLength; pixelIndex += pixelStride)
                    {
                        int channelEndByte = pixelIndex + channelStride;
                        for (int byteIndex = pixelIndex; byteIndex < channelEndByte; byteIndex++)
                        {
                            int  swapB = byteIndex + swapDistance;
                            byte temp  = image.data[byteIndex];
                            image.data[byteIndex] = image.data[swapB];
                            image.data[swapB]     = temp;
                        }
                    }
                }
            }
            return(image.data);
        }
    static ImageMsg MsgFromTexture(Texture2D text)
    {
        int width    = text.width;
        int height   = text.height;
        int channels = 4;

        Color32[] pixels = text.GetPixels32();
        byte[]    buf    = new byte[width * height * channels];
        // to bgr
        int index = 0;

        for (int y = 0; y < height; ++y)
        {
            for (int x = 0; x < width; ++x, ++index)
            {
                buf [4 * index]     = pixels [index].r;
                buf [4 * index + 1] = pixels [index].g;
                buf [4 * index + 2] = pixels [index].b;
                buf [4 * index + 3] = pixels [index].a;
            }
        }
        ImageMsg msg = new ImageMsg();

        msg.width      = width;
        msg.height     = height;
        msg.channels   = channels;
        msg.image_data = buf;
        return(msg);
    }
Beispiel #4
0
    public new static void CallBack(ROSBridgeMsg msg)
    {
        ImageMsg image = (ImageMsg)msg;

        byte[]    color_data = image.GetImage();
        int       height     = (int)image.GetHeight();
        int       width      = (int)image.GetWidth();
        int       step       = (int)image.GetRowStep();
        Texture2D tex        = new Texture2D(width, height, TextureFormat.RGB24, false);

        Color[] colors = new Color[width * height];
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                byte  B = color_data[j * step + i * 3];
                byte  G = color_data[j * step + i * 3 + 1];
                byte  R = color_data[j * step + i * 3 + 2];
                Color c = new Color((float)R / 255.0f, (float)G / 255.0f, (float)B / 255.0f);
                colors[j * width + i] = c;
                //tex.SetPixel(i, height - j, c);
            }
        }
        tex.SetPixels(colors);
        tex.Apply();
        GameObject cam_image = GameObject.Find("CameraImage");

        cam_image.GetComponent <RawImage>().texture = tex;
    }
Beispiel #5
0
 public void PushMessage(ImageMsg msg)
 {
     if (msg != null)
     {
         mEventQueue.pushObject(msg);
     }
 }
Beispiel #6
0
 public void SendImage(ImageMsg msg)
 {
     if (connect == null || !connect.isConnected)
     {
         return;
     }
     connect.writeObject(msg);
 }
Beispiel #7
0
        public static int GetBytesPerChannel(this ImageMsg image)
        {
            switch (image.encoding)
            {
            case "8SC1":
            case "8SC2":
            case "8SC3":
            case "8SC4":
            case "8UC1":
            case "8UC2":
            case "8UC3":
            case "8UC4":
            case "mono8":
            case "bgr8":
            case "rgb8":
            case "bgra8":
            case "rgba8":
            case "bayer_rggb8":
            case "bayer_bggr8":
            case "bayer_gbrg8":
            case "bayer_grbg8":
                return(1);

            case "16SC1":
            case "16SC2":
            case "16SC3":
            case "16SC4":
            case "16UC1":
            case "16UC2":
            case "16UC3":
            case "16UC4":
            case "mono16":
            case "bayer_rggb16":
            case "bayer_bggr16":
            case "bayer_gbrg16":
            case "bayer_grbg16":
                return(2);

            case "32FC1":
            case "32SC1":
            case "32FC2":
            case "32SC2":
            case "32FC3":
            case "32SC3":
            case "32FC4":
            case "32SC4":
                return(4);

            case "64FC1":
            case "64FC2":
            case "64FC3":
            case "64FC4":
                return(8);
            }
            return(1);
        }
Beispiel #8
0
    // Update is called once per frame
    void Update()
    {
        ImageMsg info = null;

        info = mEventQueue.popObject();

        while (info != null)
        {
            onNotify(info);
            info = mEventQueue.popObject();
        }
    }
Beispiel #9
0
    // ROS Topic Subscriber methods
    public ROSBridgeMsg OnReceiveMessage(string topic, JSONNode raw_msg, ROSBridgeMsg parsed = null)
    {
        Debug.Log("Camera Recieved message");

        ROSBridgeMsg result = null;

        ImageMsg meshMsg = new ImageMsg(raw_msg);
        // Obtain visualizer for this topic
        ImageVisualizer visualizer = imageVisualizers[topic];

        this.imageVisualizers[topic].SetFrame(meshMsg, videoType);
        return(result);
    }
Beispiel #10
0
    public new static void CallBack(ROSBridgeMsg msg)
    {
        ImageMsg image = (ImageMsg)msg;

        int curr = num;

        num++;
        if (verbose)
        {
            Debug.Log("Start processing " + curr);
        }

        uint width  = image.GetWidth();
        uint height = image.GetHeight();

        byte[] raw_data = image.GetImage();

        RawImage texObj = GameObject.Find(objectName).GetComponent <RawImage>();

        Texture2D tex = GameObject.Find(objectName).GetComponent <RawImage>().texture as Texture2D;

        if (tex == null)
        {
            tex            = new Texture2D((int)width / 2, (int)height / 2, TextureFormat.RGBA32, false);
            texObj.texture = tex;
        }

        NativeArray <Color32> image_data = tex.GetRawTextureData <Color32>();

        if (image_data == null || image_data.Length * 4 != raw_data.Length)
        {
            tex            = new Texture2D((int)width / 2, (int)height / 2, TextureFormat.RGBA32, false);
            texObj.texture = tex;
            image_data     = tex.GetRawTextureData <Color32>();
        }

        for (int ind = 0, o_ind = raw_data.Length - 4; ind < image_data.Length; ind += 1, o_ind -= 4)
        {
            image_data[ind] = new Color32(raw_data[o_ind + 3], (byte)((raw_data[o_ind + 1] + raw_data[o_ind + 2]) / 2), raw_data[o_ind], 255);
        }

        //tex.LoadRawTextureData(image_data);
        tex.Apply();

        if (verbose)
        {
            Debug.Log("Finish processing " + curr);
        }

        //File.WriteAllBytes(Application.dataPath + "/Captures/" + curr + ".png", tex.EncodeToPNG());
    }
Beispiel #11
0
        /// <summary>
        /// 发送图片消息
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="access_token">访问令牌</param>
        /// <returns></returns>
        public static RequestResultBaseModel SendImage(ImageMsg msg, string access_token)
        {
            if (null == msg || string.IsNullOrWhiteSpace(msg.touser))
            {
                throw new ArgumentException("参数错误", nameof(msg.touser));
            }
            if (null == msg.image || string.IsNullOrWhiteSpace(msg.image.media_id))
            {
                throw new ArgumentException("image错误");
            }

            string jsonString = JsonHelper.Serialize(msg);

            return(SendToWeCart(jsonString, access_token));
        }
    public void SetFrame(ImageMsg data, string videoPlayer)
    {
        Debug.Log(videoPlayer);
        if (videoPlayer == "")
        {
            return;
        }
        Texture2D tex = new Texture2D((int)data.GetWidth(), (int)data.GetHeight(), TextureFormat.RGB24, false);

        GameObject.Find(videoPlayer).GetComponent <RawImage>().enabled        = true;
        GameObject.Find(videoPlayer).GetComponent <RectTransform>().sizeDelta = new Vector2((int)data.GetWidth(), (int)data.GetHeight());
        tex.LoadRawTextureData(data.GetImage());
        tex.Apply();
        GameObject.Find(videoPlayer).GetComponent <RawImage>().texture = tex;
    }
Beispiel #13
0
        public static bool IsBayerEncoded(this ImageMsg image)
        {
            switch (image.encoding)
            {
            case "bayer_rggb8":
            case "bayer_bggr8":
            case "bayer_gbrg8":
            case "bayer_grbg8":
            case "bayer_rggb16":
            case "bayer_bggr16":
            case "bayer_gbrg16":
            case "bayer_grbg16":
                return(true);

            default:
                return(false);
            }
        }
Beispiel #14
0
        public static string SendImage(ImageMsg msg)
        {
            if (null == msg || string.IsNullOrWhiteSpace(msg.touser))
            {
                return(string.Empty);
            }
            if (null == msg.image || string.IsNullOrWhiteSpace(msg.image.media_id))
            {
                throw new ArgumentException("image错误");
            }

            string jsonString = JsonHelper.Serialize(msg);

            if (!string.IsNullOrWhiteSpace(jsonString))
            {
                return(jsonString);
            }
            return(string.Empty);
        }
Beispiel #15
0
        public static Texture2D ToTexture2D(this ImageMsg message, bool debayer = false, bool convertBGR = true, bool flipY = true)
        {
            Texture2D tex;

            byte[] data;
            if (debayer && message.IsBayerEncoded())
            {
                tex = new Texture2D((int)message.width / 2, (int)message.height / 2, TextureFormat.RGBA32, false);
                message.DebayerConvert(flipY);
                data = message.data;
            }
            else
            {
                tex  = new Texture2D((int)message.width, (int)message.height, message.GetTextureFormat(), false);
                data = EncodingConversion(message, convertBGR, flipY);
            }

            tex.LoadRawTextureData(data);
            tex.Apply();
            return(tex);
        }
Beispiel #16
0
    /// <summary>
    /// Renders the received images from the zed camera
    /// </summary>
    /// <param name="msg">JSON msg containing the roboy pose.</param>
    private void RefreshZedImage(ImageMsg image)
    {
        //Get the image as an array from the message.
        byte[] image_temp = image.GetImage();

        int j = 0;

        for (int i = 0; i < image_temp.Length; i += 3)
        {
            m_ColorArrayZed[j].b = image_temp[i] / (float)255;
            m_ColorArrayZed[j].g = image_temp[i + 1] / (float)255;
            m_ColorArrayZed[j].r = image_temp[i + 2] / (float)255;

            m_ColorArrayZed[j].a = 1f;
            j++;
        }

        // Load data into the texture.
        m_TexZed.SetPixels(m_ColorArrayZed);
        m_TexZed.Apply();

        Graphics.Blit(m_TexZed, RT_Zed);
    }
Beispiel #17
0
    static Texture2D TextureFromMsg(ImageMsg msg)
    {
        Texture2D tex    = new Texture2D(msg.width, msg.height, TextureFormat.ARGB32, false);
        int       width  = msg.width;
        int       height = msg.height;
        int       index  = 0;

        Color32[] pixels = new Color32[width * height];
        for (int y = 0; y < height; ++y)
        {
            for (int x = 0; x < width; ++x, ++index)
            {
                byte r = msg.image_data[4 * index];
                byte g = msg.image_data [4 * index + 1];
                byte b = msg.image_data [4 * index + 2];
                byte a = 255;
                pixels [index] = new Color32(r, g, b, a);
            }
        }
        tex.SetPixels32(pixels);
        tex.Apply();
        return(tex);
    }
Beispiel #18
0
        public static bool EncodingRequiresBGRConversion(this ImageMsg image)
        {
            switch (image.encoding)
            {
            case "8SC1":
            case "8UC1":
            case "16SC1":
            case "16UC1":
            case "32FC1":
            case "32SC1":
            case "64FC1":
            case "mono8":
            case "mono16":
                // single channel = nothing to swap
                return(false);

            case "8UC4":
            case "8SC4":
            case "bgra8":
                return(false);    // raw BGRA32 texture format

            case "rgb8":
                return(false);    // raw RGB24 texture format

            case "rgba8":
                return(false);    // raw RGB32 texture format

            case "bayer_rggb8":
            case "bayer_bggr8":
            case "bayer_gbrg8":
            case "bayer_grbg8":
                return(false);    // bayer has its own conversions needed

            default:
                return(true);
            }
        }
Beispiel #19
0
        public static TextureFormat GetTextureFormat(this ImageMsg image)
        {
            switch (image.encoding)
            {
            case "8UC1":
            case "8SC1":
                return(TextureFormat.R8);

            case "8UC2":
            case "8SC2":
                return(TextureFormat.RG16);

            case "8UC3":
            case "8SC3":
                return(TextureFormat.RGB24);

            case "8UC4":
            case "8SC4":
            case "bgra8":
                return(TextureFormat.BGRA32);    // unity supports these natively

            case "16UC1":
            case "16SC1":
                return(TextureFormat.R16);

            case "16UC2":
            case "16SC2":
                return(TextureFormat.RG32);

            case "16UC3":
            case "16SC3":
                return(TextureFormat.RGB48);

            case "16UC4":
            case "16SC4":
                return(TextureFormat.RGBA64);

            case "32SC1":
            case "32SC2":
            case "32SC3":
            case "32SC4":
                throw new NotImplementedException("32 bit integer texture formats are not supported");

            case "32FC1":
                return(TextureFormat.RFloat);

            case "32FC2":
                return(TextureFormat.RGFloat);

            case "32FC3":
                throw new NotImplementedException("32FC3 texture format is not supported");

            case "32FC4":
                return(TextureFormat.RGBAFloat);

            case "64FC1":
            case "64FC2":
            case "64FC3":
            case "64FC4":
                throw new NotImplementedException("Double precision texture formats are not supported");

            case "mono8":
                return(TextureFormat.R8);

            case "mono16":
                return(TextureFormat.R16);

            case "bgr8":
                return(TextureFormat.RGB24);

            case "rgb8":
                return(TextureFormat.RGB24);    // unity supports this natively

            case "rgba8":
                return(TextureFormat.RGBA32);    // unity supports this natively

            case "bayer_rggb8":
            case "bayer_bggr8":
            case "bayer_gbrg8":
            case "bayer_grbg8":
                return(TextureFormat.R8);

            case "bayer_rggb16":
            case "bayer_bggr16":
            case "bayer_gbrg16":
            case "bayer_grbg16":
                return(TextureFormat.R16);
            }
            return(TextureFormat.RGB24);
        }
 public static string GetMessageType()
 {
     return(ImageMsg.GetMessageType());
 }
Beispiel #21
0
    protected void Button1_Click(object sender, EventArgs e)
    {
        string vid = "";
        string hid = "";
        string hk  = "";

        FileInfo ff  = new FileInfo(imgname2 + ".png");
        string   fn2 = ff.DirectoryName + "_" + ff.Name;

        if (ct == "Pan Card")
        {
            dob = dttm.Day + "/" + dttm.Month + "/" + dttm.Year;
            vid = _Programs.GetCardVHID(10);
            Thread.Sleep(3000);
            hid = _Programs.GetCardVHID(10);

            //imgname2 = imgname2 + vid;
            CardTemp.createPan(name, fname, dob, vid, imgname, imgname2 + ".png");

            //Thread.Sleep(1000);
            //CryptUtility.HideHID(imgname2 + ".png", fn2, hid);
            //try
            //{
            //    if (File.Exists(imgname2 + ".png"))
            //        File.Delete(imgname2 + ".png");
            //}
            //catch (Exception ee) { }
        }
        else if (ct == "Id Card")
        {
            string[] month = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
            dob = dttm.Day + "th " + month[dttm.Month].ToUpper() + ", " + dttm.Year;
            vid = _Programs.GetCardVHID(4);
            Thread.Sleep(3000);
            hid = _Programs.GetCardVHID(4);
            CardTemp.createID(name, vid, dob, imgname, imgname2 + ".png");
        }
        else if (ct == "Passport")
        {
            string[] month = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
            dob = dttm.Day + " " + month[dttm.Month].ToUpper() + ", " + dttm.Year;
            vid = _Programs.GetPPNo(9);
            Thread.Sleep(3000);
            hid = _Programs.GetPPNo(9);
            DateTime dt1 = DateTime.Now;
            string   doi = dt1.Day + " " + month[dt1.Month].ToUpper() + ", " + dt1.Year;
            string   doe = dt1.Day + " " + month[dt1.Month].ToUpper() + ", " + (dt1.Year + 10);
            CardTemp.createPassport(lname, fname2, "indian", gender[0].ToString(), dob, doi, doe, city, vid, imgname, imgname2 + ".png");
        }

        Thread.Sleep(1000);
        byte[] bb = ImageMsg.createImageMsg(fname2, lname, gender, dob, vid, hid, un2);
        MyFile.UpdateFile(imgname2 + ".png", bb);
        Thread.Sleep(1000);
        hk = MyFile.GetHashKey(imgname2 + ".png");
        Thread.Sleep(1000);

        string ccdt = DateTime.Now.ToShortDateString();
        string qry  = "update userappinfo set appstatus='Done', ccdt=datevalue('" + ccdt + "') where appid='" + appid + "'";
        int    i    = _Database.NonSelectQuery(qry);

        if (i == 1)
        {
            qry = "insert into cardlist values('" + appid + "','" + un2 + "','" + ct + "','" + vid + "','" + hid + "','" + hk + "')";
            _Database.NonSelectQuery(qry);
            Response.Write("<script language='javascript'> alert('The Card has been generated successfully'); document.location='" + ResolveClientUrl("~/CardList.aspx") + "';</script>");
            // smsg.Text = "<b>The Card has been generated successfully</b>";
            //Response.Redirect("VerifiedList.aspx");
        }
        else
        {
            smsg.Text = "<b>Error: </b>" + _Database.LastError;
        }
    }
Beispiel #22
0
        public static void DebayerConvert(this ImageMsg image, bool flipY = true)
        {
            int channelStride    = image.GetBytesPerChannel();
            int width            = (int)image.width;
            int height           = (int)image.height;
            int rowStride        = width * channelStride;
            int dataSize         = rowStride * height;
            int finalPixelStride = channelStride * 4;

            int[] reorderIndices;
            switch (image.encoding)
            {
            case "bayer_rggb8":
                reorderIndices = new int[] { 0, 1, width + 1 };
                break;

            case "bayer_bggr8":
                reorderIndices = new int[] { width + 1, 1, 0 };
                break;

            case "bayer_gbrg8":
                reorderIndices = new int[] { width, 0, 1 };
                break;

            case "bayer_grbg8":
                reorderIndices = new int[] { 1, 0, width };
                break;

            case "bayer_rggb16":
                reorderIndices = new int[] { 0, 1, 2, 3, rowStride + 2, rowStride + 3 };
                break;

            case "bayer_bggr16":
                reorderIndices = new int[] { rowStride + 2, rowStride + 3, 2, 3, 0, 1 };
                break;

            case "bayer_gbrg16":
                reorderIndices = new int[] { rowStride, rowStride + 1, 0, 1, 2, 3 };
                break;

            case "bayer_grbg16":
                reorderIndices = new int[] { 2, 3, 0, 1, rowStride, rowStride + 1 };
                break;

            default:
                return;
            }

            if (flipY)
            {
                ReverseInBlocks(image.data, rowStride * 2, (int)image.height / 2);
            }

            if (s_ScratchSpace == null || s_ScratchSpace.Length < rowStride * 2)
            {
                s_ScratchSpace = new byte[rowStride * 2];
            }

            int rowStartIndex = 0;

            while (rowStartIndex < dataSize)
            {
                Buffer.BlockCopy(image.data, rowStartIndex, s_ScratchSpace, 0, rowStride * 2);
                int pixelReadIndex  = 0;
                int pixelWriteIndex = rowStartIndex;
                while (pixelReadIndex < rowStride)
                {
                    for (int Idx = 0; Idx < reorderIndices.Length; ++Idx)
                    {
                        image.data[pixelWriteIndex + Idx] = s_ScratchSpace[pixelReadIndex + reorderIndices[Idx]];
                    }
                    image.data[pixelWriteIndex + reorderIndices.Length] = 255;
                    if (channelStride == 2)
                    {
                        image.data[pixelWriteIndex + reorderIndices.Length + 1] = 255;
                    }
                    pixelReadIndex  += channelStride * 2;
                    pixelWriteIndex += finalPixelStride;
                }
                rowStartIndex += rowStride * 2;
            }

            image.width    = image.width / 2;
            image.height   = image.height / 2;
            image.encoding = channelStride == 1 ? "rgba8" : "rgba16";
            image.step     = (uint)(channelStride * image.width);
        }
Beispiel #23
0
 /// <summary>
 /// Primary function to receive image (simulation) messages from ROSBridge. Renders the received images.
 /// </summary>
 /// <param name="msg">JSON msg containing roboy pose.</param>
 public void ReceiveSimMessage(ImageMsg image)
 {
     RefreshSimImage(image);
 }
Beispiel #24
0
        public new static void CallBack(ROSBridgeMsg msg)
        {
            ImageMsg image = (ImageMsg)msg;

            BeRoboyManager.Instance.ReceiveSimMessage(image);
        }
Beispiel #25
0
 void OnReceveImage(ImageMsg msg)
 {
 }
Beispiel #26
0
 /// <summary>
 /// Primary function to receive image (zed) messages from ROSBridge. Renders the received images.
 /// </summary>
 /// <param name="msg">JSON msg containing roboy pose.</param>
 public void ReceiveZedMessage(ImageMsg image)
 {
     RefreshZedImage(image);
 }
Beispiel #27
0
        public string Index()
        {
            StreamReader reader    = new StreamReader(Request.InputStream);
            string       xmlData   = reader.ReadToEnd();
            BaseMsg      baseModel = XmlHelper.ConvertToModel <BaseMsg>(xmlData);

            BaseResponseMsg response = new BaseResponseMsg
            {
                CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                ToUserName   = baseModel.FromUserName,
                FromUserName = baseModel.ToUserName
            };//响应对象

            string result = "";

            try
            {
                if (baseModel.MsgType == "event")
                {
                    EventMsg model = XmlHelper.ConvertToModel <EventMsg>(xmlData);
                    //EventMsgBll.HandlerTheEvent(model);
                    EventMsgBll.Add(model);
                    EventMsgBll.SaveChanges();
                    return("");
                }
                var res = (MsgType)Enum.Parse(typeof(MsgType), baseModel.MsgType);
                switch (res)
                {
                case MsgType.text:
                {
                    TextMsg model = XmlHelper.ConvertToModel <TextMsg>(xmlData);
                    TextMsgBll.Add(model);
                    //TODO 处理用户的文字信息
                    response = new ResponseTextMsg
                    {
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        ToUserName   = baseModel.FromUserName,
                        FromUserName = baseModel.ToUserName,
                        Content      = "欢迎关注我的微信!我是wdq!"
                    };
                }
                break;

                case MsgType.image:
                {
                    ImageMsg model = XmlHelper.ConvertToModel <ImageMsg>(xmlData);
                    ImageMsgBll.Add(model);
                    //TODO 处理用户的图片信息
                    response = new ResponseImageMsg
                    {
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        MediaId      = "1212"
                    };
                }
                break;

                case MsgType.voice:
                {
                    VoiceMsg model = XmlHelper.ConvertToModel <VoiceMsg>(xmlData);
                    VoiceMsgBll.Add(model);
                    if (model.Recognition != null)
                    {
                        //TODO 处理用户的语音信息
                    }
                    response = new ResponseVoiceMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        MediaId      = "123"
                    };
                }
                break;

                case MsgType.video:
                case MsgType.shortvideo:
                {
                    VideoMsg model = XmlHelper.ConvertToModel <VideoMsg>(xmlData);
                    VideoMsgBll.Add(model);
                    //TODO 处理用户的小视频信息
                }
                    response = new ResponseVideoMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        MediaId      = "123",
                        Description  = "test",
                        Title        = "回复视频消息"
                    };
                    break;

                case MsgType.location:
                {
                    LocationMsg model = XmlHelper.ConvertToModel <LocationMsg>(xmlData);
                    LocationMsgBll.Add(model);
                    //TODO 处理用户的地理位置信息
                }
                    response = new ResponseMusicMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        Title        = "回复音乐消息",
                        Description  = "一段感人的音乐",
                        HQMusicUrl   = "http://baidu.music.com",
                        MusicUrl     = "fuuuul",
                        ThumbMediaId = "123"
                    };
                    break;

                case MsgType.link:
                {
                    LinkMsg model = XmlHelper.ConvertToModel <LinkMsg>(xmlData);
                    LinkBll.Add(model);
                    //TODO 处理用户的连接信息
                }
                    response = new ResponseNewsMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        ArticleCount = 1,
                        Articles     = new[] { new ResponseNewsMsg.Article {
                                                   Description = "", PicUrl = "", Title = "", Url = ""
                                               } },
                    };
                    break;
                }

                EventMsgBll.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                result = dbEx.EntityValidationErrors.SelectMany(item => item.ValidationErrors).Aggregate(result, (current, item2) => current + string.Format("{0}:{1}\r\n", item2.PropertyName, item2.ErrorMessage));
            }
            return(response.ToUserName == null ? "" : response.GetResponseStr());
        }