public void sendPositionUpdate(PosData posdata)
        {
            string msg = "{ \"Id\":\"" + posdata.Id +
                         "\",\"X\":" + String.Format("{0:0.####}", posdata.X) +
                         ",\"Y\":" + String.Format("{0:0.####}", posdata.Y) +
                         ",\"Elv\":" + String.Format("{0:0.####}", posdata.Elv) +
                         ",\"Qx\":" + posdata.Quat_x +
                         ",\"Qy\":" + posdata.Quat_y +
                         ",\"Qz\":" + posdata.Quat_z +
                         ",\"Qw\":" + posdata.Quat_w +
                         ",\"Message\":\"" + posdata.Message +
                         "\",\"MessageCounter\":" + posdata.Msgcount +
                         ",\"Quality\":" + posdata.Quality +
                         "}";

            foreach (var socket in allSockets.ToList())
            {
                try
                {
                    socket.Send(msg); //broadcasting
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                }
            }
            Console.WriteLine(DateTime.Now + " [WebSocketServer] sent message broadcast: \n" + msg + "\n\n");
            //Console.ReadLine();
        }
        private void parseMessage(string message)
        {
            string[] parts = { };

            message = message.ToLower();

            PosData posdata = new PosData();

            parts = message.Split(new String[] { "[" }, StringSplitOptions.RemoveEmptyEntries);

            string[] d = { };
            foreach (string p in parts)
            {
                string[] b = p.Split(new String[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);

                switch (b[0])
                {
                case "message]":     //message part found
                    for (int i = 1; i < b.Length; i++)
                    {
                        string[] c = b[i].Split(new Char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        switch (c[0])
                        {
                        case "sender": posdata.Id = c[1];
                            break;

                        case "timestamp": posdata.Timestamp = float.Parse(c[1]);
                            break;

                        case "msgcounter": posdata.Msgcount = int.Parse(c[1]);
                            break;

                        case "version": posdata.Version = float.Parse(c[1]);
                            break;

                        case "message":
                            if (c.Length > 1)
                            {
                                posdata.Message = c[1];
                            }
                            else
                            {
                                posdata.Message = "";
                            }

                            break;

                        default:
                            break;
                        }
                    }
                    break;

                case "location]":     //message location found
                    for (int i = 1; i < b.Length; i++)
                    {
                        string[] c = b[i].Split(new Char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        switch (c[0])
                        {
                        case "pos":
                            d           = c[1].Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                            posdata.X   = float.Parse(d[0]);
                            posdata.Y   = float.Parse(d[1]);
                            posdata.Elv = float.Parse(d[2]);
                            break;

                        case "ori":
                            d = c[1].Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                            posdata.Quat_x = float.Parse(d[0]);
                            posdata.Quat_y = float.Parse(d[1]);
                            posdata.Quat_z = float.Parse(d[2]);
                            posdata.Quat_w = float.Parse(d[3]);
                            break;

                        case "quality":
                            posdata.Quality = float.Parse(c[1]);
                            break;

                        default:
                            break;
                        }
                    }
                    break;
                }
            }

            this.wsserver.sendPositionUpdate(posdata);
        }
        private void parseMessage(string message)
        {
            string[] parts = { };

            message = message.ToLower();

            PosData posdata = new PosData();
            parts = message.Split(new String[] { "[" }, StringSplitOptions.RemoveEmptyEntries);

            string[] d = { };
            foreach (string p in parts)
            {

                string[] b = p.Split(new String[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);

                switch (b[0])
                {
                    case "message]": //message part found
                        for (int i = 1; i < b.Length; i++)
                        {
                            string[] c = b[i].Split(new Char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            switch (c[0])
                            {
                                case "sender": posdata.Id = c[1];
                                    break;

                                case "timestamp": posdata.Timestamp = float.Parse(c[1]);
                                    break;

                                case "msgcounter": posdata.Msgcount = int.Parse(c[1]);
                                    break;

                                case "version": posdata.Version = float.Parse(c[1]);
                                    break;

                                case "message":
                                    if (c.Length > 1)
                                    {
                                        posdata.Message = c[1];
                                    }
                                    else
                                    {
                                        posdata.Message = "";
                                    }

                                    break;

                                default:
                                    break;
                            }
                        }
                        break;

                    case "location]": //message location found
                        for (int i = 1; i < b.Length; i++)
                        {
                            string[] c = b[i].Split(new Char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            switch (c[0])
                            {
                                case "pos":
                                    d = c[1].Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                                    posdata.X = float.Parse(d[0]);
                                    posdata.Y = float.Parse(d[1]);
                                    posdata.Elv = float.Parse(d[2]);
                                    break;

                                case "ori":
                                    d = c[1].Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                                    posdata.Quat_x = float.Parse(d[0]);
                                    posdata.Quat_y = float.Parse(d[1]);
                                    posdata.Quat_z = float.Parse(d[2]);
                                    posdata.Quat_w = float.Parse(d[3]);
                                    break;

                                case "quality":
                                    posdata.Quality = float.Parse(c[1]);
                                    break;
                                default:
                                    break;
                            }
                        }
                        break;
                }
            }

            this.wsserver.sendPositionUpdate(posdata);
        }