Example #1
0
        public static void OnNewMessage(string str)
        {
            NewMessageEventsArgs MessageEvents = new NewMessageEventsArgs(str);

            if (messageHandler != null)
            {
                // Invoke the delegate
                messageHandler(null, MessageEvents);
            }
        }
Example #2
0
 public static void OnNewMessage(string str)
 {
     NewMessageEventsArgs MessageEvents = new NewMessageEventsArgs(str);
     if (messageHandler != null)
     {
         // Invoke the delegate
         messageHandler(null, MessageEvents);
     }
 }
Example #3
0
        //
        //
        public static void mainServer_messageHandler(object sender, NewMessageEventsArgs e)
        {
            networkBusy = true;
            Log.WriteLineMessage(e.NewMessage);
            string sendMsg = string.Empty;

            string[] message;
            string[] Msg;

            message = e.NewMessage.Split(','); // first index contains the command
            // Make a command parser.
            //
            switch (message[0])
            {
            //
            // Main Menu
            case "Information":
                sendMsg = string.Empty;
                sendMsg = string.Format("{0},{1},{2},{3},{4},{5}",
                                        RCServo.CPU(), RCServo.Version(), Convert.ToString(RCServo.Connected),
                                        Convert.ToString(I2C.Connected),
                                        Convert.ToString(AD7918.Connected),
                                        Convert.ToString(SPI.Connected));
                break;

            case "Options":
                switch (message[1])
                {
                case "Read":
                    string tmp = string.Empty;
                    sendMsg = Server.MainIni.MotionReplay.ToString() + "," +
                              Server.MainIni.EnableRemoteControl.ToString() + "," +
                              Server.MainIni.PowerUpMotion + "," +
                              Server.MainIni.LowPowerMotion + "," +
                              Server.MainIni.LowPowerVoltage.ToString() + "," +
                              Server.MainIni.TimeBase.ToString();
                    for (int i = 0; i < StaticUtilities.numberOfServos; i++)
                    {
                        tmp += string.Format(",{0}", Server.MainIni.ChannelFunction[i]);
                    }
                    sendMsg = sendMsg + tmp;
                    break;

                case "Write":
                    Server.MainIni.MotionReplay        = Convert.ToBoolean(message[2]);
                    Server.MainIni.EnableRemoteControl = Convert.ToBoolean(message[3]);
                    Server.MainIni.PowerUpMotion       = Convert.ToInt32(message[4]);
                    Server.MainIni.LowPowerMotion      = Convert.ToInt32(message[5]);
                    Server.MainIni.LowPowerVoltage     = Convert.ToInt32(message[6]);
                    Server.MainIni.TimeBase            = Convert.ToInt32(message[7]);
                    int[] temp = new int[StaticUtilities.numberOfServos];
                    for (int i = 0; i < StaticUtilities.numberOfServos; i++)
                    {
                        temp[i] = Convert.ToInt32(message[8 + i]);
                    }
                    Server.MainIni.ChannelFunction = temp;
                    Server.MainIni.Save();
                    Server.RCServo.Close();
                    Server.RCServo.Init();

                    if (MainIni.EnableRemoteControl)
                    {
                        if (!Server.XBox360.Open)
                        {
                            Server.XBox360.Init();
                        }
                    }

                    sendMsg = "Ok";
                    break;

                default:
                    break;
                }
                break;

            case "ReadMotionFile":
                switch (message[1])
                {
                case "Open":
                    // Get the selected motion index and check
                    // in the motiontable if the motion exists
                    // return true if the file exist.
                    selectedMotionIndex = Convert.ToInt32(message[2]) + 1;
                    string file = Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Filename"];
                    if (file != string.Empty)
                    {
                        khr_1hv_motion = new IniFile(file);
                        khr_1hv_motion.Load();
                        sendMsg = "Ok";
                    }
                    else
                    {
                        sendMsg = "No motion to read";
                    }
                    break;

                case "GraphicalEdit":
                    Msg     = new string[8];
                    Msg[0]  = khr_1hv_motion["GraphicalEdit"]["Type"];
                    Msg[1]  = khr_1hv_motion["GraphicalEdit"]["Width"];
                    Msg[2]  = khr_1hv_motion["GraphicalEdit"]["Height"];
                    Msg[3]  = khr_1hv_motion["GraphicalEdit"]["Items"];
                    Msg[4]  = khr_1hv_motion["GraphicalEdit"]["Links"];
                    Msg[5]  = khr_1hv_motion["GraphicalEdit"]["Start"];
                    Msg[6]  = khr_1hv_motion["GraphicalEdit"]["Name"];
                    Msg[7]  = khr_1hv_motion["GraphicalEdit"]["Ctrl"];
                    Items   = 0;
                    Links   = 0;
                    sendMsg = string.Join(",", Msg);
                    break;

                case "Item":
                    Msg = new string[8];
                    string strItems = string.Format("Item{0}", Items++);
                    Msg[0]  = khr_1hv_motion[strItems]["Name"];
                    Msg[1]  = khr_1hv_motion[strItems]["Width"];
                    Msg[2]  = khr_1hv_motion[strItems]["Height"];
                    Msg[3]  = khr_1hv_motion[strItems]["Left"];
                    Msg[4]  = khr_1hv_motion[strItems]["Top"];
                    Msg[5]  = khr_1hv_motion[strItems]["Color"];
                    Msg[6]  = khr_1hv_motion[strItems]["Type"];
                    Msg[7]  = khr_1hv_motion[strItems]["Prm"];
                    sendMsg = string.Join(",", Msg);
                    break;

                case "Link":
                    Msg = new string[4];
                    string strLinks = string.Format("Link{0}", Links++);
                    Msg[0]  = khr_1hv_motion[strLinks]["Main"];
                    Msg[1]  = khr_1hv_motion[strLinks]["Origin"];
                    Msg[2]  = khr_1hv_motion[strLinks]["Final"];
                    Msg[3]  = khr_1hv_motion[strLinks]["Point"];
                    sendMsg = string.Join(",", Msg);
                    break;

                default:
                    break;
                }
                break;

            case "WriteMotionFile":
                switch (message[1])
                {
                case "Open":
                    // create random filename.
                    fileName = Path.ChangeExtension(Path.GetRandomFileName(), "RMF");
                    fileName = string.Format("{0}\\{1}", motionsFolder, fileName);
                    // get the index for the datatable where the
                    // motion is going to be writen.
                    selectedMotionIndex = Convert.ToInt32(message[2]) + 1;
                    khr_1hv_motion      = new IniFile(fileName);
                    sendMsg             = "Ok";
                    break;

                case "GraphicalEdit":
                    IniSection section1 = new IniSection();
                    section1.Add("Type", message[2]);
                    section1.Add("Width", message[3]);
                    section1.Add("Height", message[4]);
                    section1.Add("Items", message[5]);
                    section1.Add("Links", message[6]);
                    section1.Add("Start", message[7]);
                    section1.Add("Name", message[8]);
                    section1.Add("Ctrl", message[9]);
                    khr_1hv_motion.Add("GraphicalEdit", section1);
                    Items   = 0;
                    Links   = 0;
                    sendMsg = "Ok";
                    break;

                case "Item":
                    IniSection section2 = new IniSection();
                    section2.Add("Name", message[2]);
                    section2.Add("Width", message[3]);
                    section2.Add("Height", message[4]);
                    section2.Add("Left", message[5]);
                    section2.Add("Top", message[6]);
                    section2.Add("Color", message[7]);
                    section2.Add("Type", message[8]);
                    string strChannel = string.Format("{0}", message[9]);
                    for (int i = 10; i < message.Length; i++)
                    {
                        strChannel = string.Format("{0},{1}", strChannel, message[i]);
                    }
                    section2.Add("Prm", strChannel);
                    string strItems = string.Format("Item{0}", Items++);
                    khr_1hv_motion.Add(strItems, section2);
                    sendMsg = "Ok";
                    break;

                case "Link":
                    IniSection section3 = new IniSection();
                    section3.Add("Main", message[2]);
                    section3.Add("Origin", message[3]);
                    section3.Add("Final", message[4]);
                    string strPoint = string.Format("{0}", message[5]);
                    for (int i = 6; i < message.Length; i++)
                    {
                        strPoint = string.Format("{0},{1}", strPoint, message[i]);
                    }
                    section3.Add("Point", strPoint);
                    string strLinks = string.Format("Link{0}", Links++);
                    khr_1hv_motion.Add(strLinks, section3);
                    sendMsg = "Ok";
                    break;

                case "Save":
                    // get the filename of the motion to be deleted
                    string file = Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Filename"];
                    if (file != string.Empty)
                    {
                        if (File.Exists(file))
                        {
                            File.Delete(file);
                            Log.WriteLineSucces(string.Format("Deleting: {0}", Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Name"]));
                        }
                        else
                        {
                            Log.WriteLineFail(string.Format("Deleting: {0}", Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Name"]));
                        }
                    }
                    Name = khr_1hv_motion["GraphicalEdit"]["Name"];
                    Ctrl = khr_1hv_motion["GraphicalEdit"]["Ctrl"];
                    if (!khr_1hv_motion.Save())
                    {
                        Log.WriteLineError(string.Format("Saving: {0}", Name));
                        sendMsg = "NOk";
                    }
                    else
                    {
                        Log.WriteLineSucces(string.Format("Saving: {0}", Name));
                        Server.Table.addNewMotion(selectedMotionIndex, fileName, Name, Ctrl);
                        Server.Table.Save();
                        sendMsg = "Ok";
                    }
                    break;
                }
                break;

            case "PlayMotionFile":
                int strMotion = (int.Parse(message[1]));
                Log.WriteLineMessage(string.Format("Playing motion: {0}, {1}", Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Name"], Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Control"]));
                Server.MotionInterpreter.Filename = Server.Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Filename"];
                Server.MotionInterpreter.Play();
                //sendMsg = "Ok"; // No need for this.
                break;

            case "StopMotionFile":
                Server.MotionInterpreter.Stop();
                break;

            case "PauseMotionFile":
                Server.MotionInterpreter.Pause();
                break;

            case "DataTable":
                switch (message[1])
                {
                case "Open":
                    sendMsg = string.Format("Open,{0},{1}", StaticUtilities.numberOfMotions, StaticUtilities.numberOfDataTableItems);
                    break;

                case "Get":
                    string[] strTable = new string[StaticUtilities.numberOfDataTableItems];
                    string   tmp      = string.Format("{0}{1}", StaticUtilities.DataTableMotion, message[2]);
                    strTable[0] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableMotion];
                    strTable[1] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableName];
                    strTable[2] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableCount];
                    strTable[3] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableDate];
                    strTable[4] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableCtrl];
                    sendMsg     = string.Format("Get,{0}", string.Join(",", strTable));
                    break;

                default:
                    break;
                }
                break;

            case "DeleteMotionFile":
                int    strMotion1 = int.Parse(message[1]) + 1;
                string file1      = Server.Table.MotionTable["Motion" + strMotion1.ToString()]["Filename"];
                Server.Table.deleteMotion(strMotion1);
                Server.Table.Save();
                if (file1 != string.Empty)
                {
                    if (File.Exists(file1))
                    {
                        File.Delete(file1);
                        Log.WriteLineSucces(string.Format("Deleting: {0}", file1));
                    }
                    else
                    {
                        Log.WriteLineFail(string.Format("Deleting: {0}", file1));
                    }
                }
                else
                {
                    Log.WriteLineFail("Deleting: No such file");
                }
                // send something back as conformation.
                sendMsg = "Ok";
                break;

            case "Servos":
                switch (message[1])
                {
                case "Set":
                    int[] width = new int[StaticUtilities.numberOfServos];
                    Array.Copy(message, 2, strChannelData, 0, 24);
                    for (int q = 0; q < StaticUtilities.numberOfServos; q++)
                    {
                        width[q] = Convert.ToInt32(strChannelData[q]);
                    }
                    Server.MotionInterpreter.Servos(width, 100);
                    break;

                default:
                    break;
                }
                break;

            case "Trim":
                switch (message[1])
                {
                case "Get":
                    sendMsg = Server.Trim.Data;
                    // Set the servo's position to the trim values
                    MotionInterpreter.Trim();
                    break;

                case "Set":
                    Array.Copy(message, 2, strChannelData, 0, 24);
                    Server.Trim.Data = string.Join(",", strChannelData);
                    sendMsg          = "Ok";
                    // misschien als check de trim.data weer terugsturen.
                    MotionInterpreter.Trim();
                    break;

                case "Stop":
                    Server.Trim.Save();
                    sendMsg = "Ok";
                    break;

                default:
                    break;
                }
                break;

            case "Close":
            case "close":
                infinteLoop = false;
                sendMsg     = "No Connection";
                break;

            case "Open":
                sendMsg = "Connected";
                break;

            case "XBox360Controller":
                switch (message[1])
                {
                case "Open":
                    if (Server.XBox360.Open)
                    {
                        Server.XBox360.ControllerState();
                    }
                    sendMsg = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}",
                                            Server.XBox360.Open,
                                            Server.XBox360.Buttons,
                                            Server.XBox360.ThumbsticksX1, Server.XBox360.ThumbsticksY1,
                                            Server.XBox360.ThumbsticksX2, Server.XBox360.ThumbsticksY2,
                                            Server.XBox360.TriggerLeft, Server.XBox360.TriggerRight,
                                            MainIni.PA1Reference, MainIni.PA2Reference, MainIni.PA3Reference, MainIni.PA4Reference,
                                            MainIni.PA5Reference, MainIni.PA6Reference);
                    break;

                case "Read":
                    Server.XBox360.ControllerState();
                    sendMsg = string.Format("{0},{1},{2},{3},{4},{5},{6},{7}",
                                            Server.XBox360.Open,
                                            Server.XBox360.Buttons,
                                            Server.XBox360.ThumbsticksX1, Server.XBox360.ThumbsticksY1,
                                            Server.XBox360.ThumbsticksX2, Server.XBox360.ThumbsticksY2,
                                            Server.XBox360.TriggerLeft, Server.XBox360.TriggerRight);
                    break;

                case "Stop":
                    MainIni.PA1Reference = Convert.ToInt32(message[2]);
                    MainIni.PA2Reference = Convert.ToInt32(message[3]);
                    MainIni.PA3Reference = Convert.ToInt32(message[4]);
                    MainIni.PA4Reference = Convert.ToInt32(message[5]);
                    MainIni.PA5Reference = Convert.ToInt32(message[6]);
                    MainIni.PA6Reference = Convert.ToInt32(message[7]);
                    MainIni.Save();
                    //sendMsg = "Ok";
                    break;

                default:
                    break;
                }
                break;

            case "MagnetoData":
                short[] compass = Compass.CompassData();
                sendMsg = "MagnetoData," +
                          compass[0].ToString() + "," +
                          compass[1].ToString() + "," +
                          compass[2].ToString();
                break;

            case "AcceleroData":
                short[] accelero = Accelero.AcceleroData();
                sendMsg = "AcceleroData," +
                          accelero[0].ToString() + "," +
                          accelero[1].ToString() + "," +
                          accelero[2].ToString();
                break;

            case "GyroscopeData":
                short[] gyro = Gyro.GyroData();
                sendMsg = "GyroscopeData," +
                          gyro[0].ToString() + "," +
                          gyro[1].ToString() + "," +
                          gyro[2].ToString() + "," +
                          gyro[3].ToString() + "," +
                          gyro[4].ToString() + "," +
                          gyro[5].ToString() + "," +
                          gyro[6].ToString() + "," +
                          gyro[7].ToString();
                break;

            default:
                break;
            }
            if (sendMsg != string.Empty)
            {
                Network.SendMessage(sendMsg);
            }
            networkBusy = false;
        }
Example #4
0
        //
        //
        public static void mainServer_messageHandler(object sender, NewMessageEventsArgs e)
        {
            networkBusy = true;
            Log.WriteLineMessage(e.NewMessage);
            string sendMsg = string.Empty;
            string[] message;
            string[] Msg;

            message = e.NewMessage.Split(','); // first index contains the command
            // Make a command parser.
            //
            switch(message[0])
            {
                //
                // Main Menu
                case "Information":
                    sendMsg = string.Empty;
                    sendMsg = string.Format("{0},{1},{2},{3},{4},{5}",
                        RCServo.CPU(), RCServo.Version(), Convert.ToString(RCServo.Connected),
                        Convert.ToString(I2C.Connected),
                        Convert.ToString(AD7918.Connected),
                        Convert.ToString(SPI.Connected));
                    break;
                case "Options":
                    switch (message[1])
                    {
                        case "Read":
                            string tmp = string.Empty;
                            sendMsg = Server.MainIni.MotionReplay.ToString() + "," +
                                      Server.MainIni.EnableRemoteControl.ToString() + "," +
                                      Server.MainIni.PowerUpMotion + "," +
                                      Server.MainIni.LowPowerMotion + "," +
                                      Server.MainIni.LowPowerVoltage.ToString() + "," +
                                      Server.MainIni.TimeBase.ToString();
                            for (int i = 0; i < StaticUtilities.numberOfServos; i++)
                            {
                                tmp += string.Format(",{0}", Server.MainIni.ChannelFunction[i]);
                            }
                            sendMsg = sendMsg + tmp;
                            break;
                        case "Write":
                            Server.MainIni.MotionReplay = Convert.ToBoolean(message[2]);
                            Server.MainIni.EnableRemoteControl = Convert.ToBoolean(message[3]);
                            Server.MainIni.PowerUpMotion = Convert.ToInt32(message[4]);
                            Server.MainIni.LowPowerMotion = Convert.ToInt32(message[5]);
                            Server.MainIni.LowPowerVoltage = Convert.ToInt32(message[6]);
                            Server.MainIni.TimeBase = Convert.ToInt32(message[7]);
                            int[] temp = new int[StaticUtilities.numberOfServos];
                            for (int i = 0; i < StaticUtilities.numberOfServos; i++)
                            {
                                temp[i] = Convert.ToInt32(message[8 + i]);
                            }
                            Server.MainIni.ChannelFunction = temp;
                            Server.MainIni.Save();
                            Server.RCServo.Close();
                            Server.RCServo.Init();

                            if (MainIni.EnableRemoteControl)
                                if (!Server.XBox360.Open)
                                    Server.XBox360.Init();

                            sendMsg = "Ok";
                            break;
                        default:
                            break;
                    }
                    break;
                case "ReadMotionFile":
                    switch(message[1])
                    {
                        case "Open":
                            // Get the selected motion index and check
                            // in the motiontable if the motion exists
                            // return true if the file exist.
                            selectedMotionIndex = Convert.ToInt32(message[2]) + 1;
                            string file = Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Filename"];
                            if (file != string.Empty)
                            {
                                khr_1hv_motion = new IniFile(file);
                                khr_1hv_motion.Load();
                                sendMsg = "Ok";
                            }
                            else
                            {
                                sendMsg = "No motion to read";
                            }
                            break;
                        case "GraphicalEdit":
                            Msg = new string[8];
                            Msg[0] = khr_1hv_motion["GraphicalEdit"]["Type"];
                            Msg[1] = khr_1hv_motion["GraphicalEdit"]["Width"];
                            Msg[2] = khr_1hv_motion["GraphicalEdit"]["Height"];
                            Msg[3] = khr_1hv_motion["GraphicalEdit"]["Items"];
                            Msg[4] = khr_1hv_motion["GraphicalEdit"]["Links"];
                            Msg[5] = khr_1hv_motion["GraphicalEdit"]["Start"];
                            Msg[6] = khr_1hv_motion["GraphicalEdit"]["Name"];
                            Msg[7] = khr_1hv_motion["GraphicalEdit"]["Ctrl"];
                            Items = 0;
                            Links = 0;
                            sendMsg = string.Join(",", Msg);
                            break;
                        case "Item":
                            Msg = new string[8];
                            string strItems = string.Format("Item{0}", Items++);
                            Msg[0] = khr_1hv_motion[strItems]["Name"];
                            Msg[1] = khr_1hv_motion[strItems]["Width"];
                            Msg[2] = khr_1hv_motion[strItems]["Height"];
                            Msg[3] = khr_1hv_motion[strItems]["Left"];
                            Msg[4] = khr_1hv_motion[strItems]["Top"];
                            Msg[5] = khr_1hv_motion[strItems]["Color"];
                            Msg[6] = khr_1hv_motion[strItems]["Type"];
                            Msg[7] = khr_1hv_motion[strItems]["Prm"];
                            sendMsg = string.Join(",", Msg);
                            break;
                        case "Link":
                            Msg = new string[4];
                            string strLinks = string.Format("Link{0}", Links++);
                            Msg[0] = khr_1hv_motion[strLinks]["Main"];
                            Msg[1] = khr_1hv_motion[strLinks]["Origin"];
                            Msg[2] = khr_1hv_motion[strLinks]["Final"];
                            Msg[3] = khr_1hv_motion[strLinks]["Point"];
                            sendMsg = string.Join(",", Msg);
                            break;
                        default:
                            break;
                    }
                    break;
                case "WriteMotionFile":
                    switch (message[1])
                    {
                        case "Open":
                            // create random filename.
                            fileName = Path.ChangeExtension(Path.GetRandomFileName(), "RMF");
                            fileName = string.Format("{0}\\{1}", motionsFolder, fileName);
                            // get the index for the datatable where the
                            // motion is going to be writen.
                            selectedMotionIndex = Convert.ToInt32(message[2]) + 1;
                            khr_1hv_motion = new IniFile(fileName);
                            sendMsg = "Ok";
                            break;
                        case "GraphicalEdit":
                            IniSection section1 = new IniSection();
                            section1.Add("Type", message[2]);
                            section1.Add("Width", message[3]);
                            section1.Add("Height", message[4]);
                            section1.Add("Items", message[5]);
                            section1.Add("Links", message[6]);
                            section1.Add("Start", message[7]);
                            section1.Add("Name", message[8]);
                            section1.Add("Ctrl", message[9]);
                            khr_1hv_motion.Add("GraphicalEdit", section1);
                            Items = 0;
                            Links = 0;
                            sendMsg = "Ok";
                            break;
                        case "Item":
                            IniSection section2 = new IniSection();
                            section2.Add("Name", message[2]);
                            section2.Add("Width", message[3]);
                            section2.Add("Height", message[4]);
                            section2.Add("Left", message[5]);
                            section2.Add("Top", message[6]);
                            section2.Add("Color", message[7]);
                            section2.Add("Type", message[8]);
                            string strChannel = string.Format("{0}", message[9]);
                            for (int i = 10; i < message.Length; i++)
                            {
                                strChannel = string.Format("{0},{1}", strChannel, message[i]);
                            }
                            section2.Add("Prm", strChannel);
                            string strItems = string.Format("Item{0}", Items++);
                            khr_1hv_motion.Add(strItems, section2);
                            sendMsg = "Ok";
                            break;
                        case "Link":
                            IniSection section3 = new IniSection();
                            section3.Add("Main", message[2]);
                            section3.Add("Origin", message[3]);
                            section3.Add("Final", message[4]);
                            string strPoint = string.Format("{0}", message[5]);
                            for (int i = 6; i < message.Length; i++)
                            {
                                strPoint = string.Format("{0},{1}", strPoint, message[i]);
                            }
                            section3.Add("Point", strPoint);
                            string strLinks = string.Format("Link{0}", Links++);
                            khr_1hv_motion.Add(strLinks, section3);
                            sendMsg = "Ok";
                            break;
                        case "Save":
                            // get the filename of the motion to be deleted
                            string file = Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Filename"];
                            if (file != string.Empty)
                            {
                                if (File.Exists(file))
                                {
                                    File.Delete(file);
                                    Log.WriteLineSucces(string.Format("Deleting: {0}", Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Name"]));
                                }
                                else
                                {
                                    Log.WriteLineFail(string.Format("Deleting: {0}", Server.Table.MotionTable["Motion" + selectedMotionIndex.ToString()]["Name"]));
                                }
                            }
                            Name = khr_1hv_motion["GraphicalEdit"]["Name"];
                            Ctrl = khr_1hv_motion["GraphicalEdit"]["Ctrl"];
                            if (!khr_1hv_motion.Save())
                            {
                                Log.WriteLineError(string.Format("Saving: {0}", Name));
                                sendMsg = "NOk";
                            }
                            else
                            {
                                Log.WriteLineSucces(string.Format("Saving: {0}", Name));
                                Server.Table.addNewMotion(selectedMotionIndex, fileName, Name, Ctrl);
                                Server.Table.Save();
                                sendMsg = "Ok";
                            }
                            break;
                    }
                    break;
                case "PlayMotionFile":
                    int strMotion = (int.Parse(message[1]));
                    Log.WriteLineMessage(string.Format("Playing motion: {0}, {1}", Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Name"], Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Control"]));
                    Server.MotionInterpreter.Filename = Server.Table.MotionTable["Motion" + (strMotion + 1).ToString()]["Filename"];
                    Server.MotionInterpreter.Play();
                    //sendMsg = "Ok"; // No need for this.
                    break;
                case "StopMotionFile":
                    Server.MotionInterpreter.Stop();
                    break;
                case "PauseMotionFile":
                    Server.MotionInterpreter.Pause();
                    break;
                case "DataTable":
                    switch (message[1])
                    {
                        case "Open":
                            sendMsg = string.Format("Open,{0},{1}", StaticUtilities.numberOfMotions, StaticUtilities.numberOfDataTableItems);
                            break;
                        case "Get":
                            string[] strTable = new string[StaticUtilities.numberOfDataTableItems];
                            string tmp = string.Format("{0}{1}", StaticUtilities.DataTableMotion, message[2]);
                            strTable[0] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableMotion];
                            strTable[1] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableName];
                            strTable[2] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableCount];
                            strTable[3] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableDate];
                            strTable[4] = Server.Table.MotionTable[tmp][StaticUtilities.DataTableCtrl];
                            sendMsg = string.Format("Get,{0}", string.Join(",", strTable));
                            break;
                        default:
                            break;
                    }
                    break;
                case "DeleteMotionFile":
                    int strMotion1 = int.Parse(message[1]) + 1;
                    string file1 = Server.Table.MotionTable["Motion" + strMotion1.ToString()]["Filename"];
                    Server.Table.deleteMotion(strMotion1);
                    Server.Table.Save();
                    if (file1 != string.Empty)
                    {
                        if (File.Exists(file1))
                        {
                            File.Delete(file1);
                            Log.WriteLineSucces(string.Format("Deleting: {0}", file1));
                        }
                        else
                        {
                            Log.WriteLineFail(string.Format("Deleting: {0}", file1));
                        }
                    }
                    else
                    {
                        Log.WriteLineFail("Deleting: No such file");
                    }
                    // send something back as conformation.
                    sendMsg = "Ok";
                    break;
                case "Servos":
                    switch (message[1])
                    {
                        case "Set":
                            int[] width = new int[StaticUtilities.numberOfServos];
                            Array.Copy(message, 2, strChannelData, 0, 24);
                            for (int q = 0; q < StaticUtilities.numberOfServos; q++)
                            {
                                width[q] = Convert.ToInt32(strChannelData[q]);
                            }
                            Server.MotionInterpreter.Servos(width, 100);
                            break;
                        default:
                            break;
                    }
                    break;
                case "Trim":
                    switch (message[1])
                    {
                        case "Get":
                            sendMsg = Server.Trim.Data;
                            // Set the servo's position to the trim values
                            MotionInterpreter.Trim();
                            break;
                        case "Set":
                            Array.Copy(message, 2, strChannelData, 0, 24);
                            Server.Trim.Data = string.Join(",", strChannelData);
                            sendMsg = "Ok";
                            // misschien als check de trim.data weer terugsturen.
                            MotionInterpreter.Trim();
                            break;
                        case "Stop":
                            Server.Trim.Save();
                            sendMsg = "Ok";
                            break;
                        default:
                            break;
                    }
                    break;
                case "Close":
                case "close":
                    infinteLoop = false;
                    sendMsg = "No Connection";
                    break;
                case "Open":
                    sendMsg = "Connected";
                    break;
                case "XBox360Controller":
                    switch (message[1])
                    {
                        case "Open":
                            if (Server.XBox360.Open)
                                Server.XBox360.ControllerState();
                            sendMsg = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}",
                                Server.XBox360.Open,
                                Server.XBox360.Buttons,
                                Server.XBox360.ThumbsticksX1, Server.XBox360.ThumbsticksY1,
                                Server.XBox360.ThumbsticksX2, Server.XBox360.ThumbsticksY2,
                                Server.XBox360.TriggerLeft, Server.XBox360.TriggerRight,
                                MainIni.PA1Reference, MainIni.PA2Reference, MainIni.PA3Reference, MainIni.PA4Reference,
                                MainIni.PA5Reference, MainIni.PA6Reference);
                            break;
                        case "Read":
                            Server.XBox360.ControllerState();
                            sendMsg = string.Format("{0},{1},{2},{3},{4},{5},{6},{7}",
                                Server.XBox360.Open,
                                Server.XBox360.Buttons,
                                Server.XBox360.ThumbsticksX1, Server.XBox360.ThumbsticksY1,
                                Server.XBox360.ThumbsticksX2, Server.XBox360.ThumbsticksY2,
                                Server.XBox360.TriggerLeft, Server.XBox360.TriggerRight);
                            break;
                        case "Stop":
                            MainIni.PA1Reference = Convert.ToInt32(message[2]);
                            MainIni.PA2Reference = Convert.ToInt32(message[3]);
                            MainIni.PA3Reference = Convert.ToInt32(message[4]);
                            MainIni.PA4Reference = Convert.ToInt32(message[5]);
                            MainIni.PA5Reference = Convert.ToInt32(message[6]);
                            MainIni.PA6Reference = Convert.ToInt32(message[7]);
                            MainIni.Save();
                            //sendMsg = "Ok";
                            break;
                        default:
                            break;
                    }
                    break;
                case "MagnetoData":
                    short[] compass = Compass.CompassData();
                    sendMsg = "MagnetoData," +
                              compass[0].ToString() + "," +
                              compass[1].ToString() + "," +
                              compass[2].ToString();
                    break;
                case "AcceleroData":
                    short[] accelero = Accelero.AcceleroData();
                    sendMsg = "AcceleroData," +
                              accelero[0].ToString() + "," +
                              accelero[1].ToString() + "," +
                              accelero[2].ToString();
                    break;
                case "GyroscopeData":
                    short[] gyro = Gyro.GyroData();
                    sendMsg = "GyroscopeData," +
                              gyro[0].ToString() + "," +
                              gyro[1].ToString() + "," +
                              gyro[2].ToString() + "," +
                              gyro[3].ToString() + "," +
                              gyro[4].ToString() + "," +
                              gyro[5].ToString() + "," +
                              gyro[6].ToString() + "," +
                              gyro[7].ToString();
                    break;
                default:
                    break;
            }
            if (sendMsg != string.Empty)
                Network.SendMessage(sendMsg);
            networkBusy = false;
        }