private string _oscOutMulticastIPAddress = "224.0.1.0";//224.0.0.0 - 239.255.255.255 !

        private void _ValidateOscOutIPAddress()
        {
            IPAddress addr;

            _isValidOscOutIPAddress     = UniOSCUtils.ValidateIPAddress(_oscOutIPAddress, out addr);
            _oscOutIPAddressAsIPAddress = addr;
        }
        private string _oscMulticastIPAddress = "224.0.1.0"; //224.0.0.0 - 239.255.255.255 !

        private void _ValidateOscIPAddress()
        {
            //Debug.Log("OSCConnection.ValidateOscIPAddress");
            IPAddress addr;

            _isValidOscIPAddress       = UniOSCUtils.ValidateIPAddress(localIPAddress, out addr);
            _oscInIPAddressAsIPAddress = addr;
        }
        private void _ValidateOscOutMulticastIPAddress()
        {
            IPAddress addr;

            _isValidOscOutMulticastIPAddress     = UniOSCUtils.ValidateIPAddress(_oscOutMulticastIPAddress, out addr);
            _oscOutMulticastIPAddressAsIPAddress = addr;

            if (_isValidOscOutMulticastIPAddress)
            {
                //Second validation
                _isValidOscOutMulticastIPAddress = UniOSCUtils.RegexMatch(_oscOutMulticastIPAddress, UniOSCUtils.MULTICASTREGEX);
            }
        }
        private void _ValidateOscMulticastIPAddress()
        {
            //Debug.Log("OSCConnection.ValidateOscMulticastIPAddress");
            IPAddress addr;

            _isValidOscMulticastIPAddress     = UniOSCUtils.ValidateIPAddress(_oscMulticastIPAddress, out addr);
            _oscMulticastIPAddressAsIPAddress = addr;

            if (_isValidOscMulticastIPAddress)
            {
                //Second validation
                _isValidOscMulticastIPAddress = UniOSCUtils.RegexMatch(_oscMulticastIPAddress, UniOSCUtils.MULTICASTREGEX);
            }
        }
        private void _CreateConnectionOut()
        {
            if (_oscTransmitter != null)
            {
                _DeleteConnectionOut();
            }
            //Debug.Log("UniOSCConnection._CreateConnectionOut:"+oscOutPort);
            IPAddress addr;

            if (UniOSCUtils.ValidateIPAddress(oscOutIPAddress, out addr))
            {
                _oscTransmitter = new UniOSCTransmitter(addr, oscOutPort);
            }
            else
            {
                //Invalid IPAdress
                Debug.LogWarning("OSCConnection.Invalid IPAdress:" + oscOutIPAddress);
            }
        }
        public static void ShowOSCReciverStatus(UniOSCConnection oscConnection)
        {
            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal();

            Event evt = Event.current;

            GUIStyle style = new GUIStyle(GUI.skin.button);

            style.padding = new RectOffset(0, 0, 0, 0);
            style.border  = new RectOffset(0, 0, 0, 0);

            #region IN

            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(200));

            Rect area = GUILayoutUtility.GetRect(195.0f, 40.0f);
            area.width *= 1f;
            Rect r1 = GUILayoutUtility.GetRect(195.0f, 20.0f);
            r1.width *= 1f;


            int  btnsize1 = 20;
            Rect r1b      = new Rect(area);
            r1b.x     += r1b.width - (btnsize1 * 1);
            r1b.y     += r1b.height - btnsize1;
            r1b.width  = btnsize1 * 1;
            r1b.height = btnsize1;


            if (oscConnection.isConnected)
            {
                GUI.contentColor = Color.white;
                //GUI.backgroundColor =  UniOSCUtils.CONNECTION_BG;
                //GUI.Box(area,"");//to dimm the background
                GUI.backgroundColor = oscConnection.dispatchOSC ? UniOSCUtils.CONNECTION_ON_COLOR : UniOSCUtils.CONNECTION_PAUSE_COLOR;
                EditorGUI.HelpBox(area, "OSC IN: " + UniOSCConnection.localIPAddress + "\nPort: " + oscConnection.oscPort + "\nListening", MessageType.Info);
                if (GUI.Button(r1, "Disconnect"))
                {
                    oscConnection.DisconnectOSC();
                }

                GUI.backgroundColor = Color.white;
                GUI.contentColor    = Color.white;
                //if (GUI.Button (r1b,new GUIContent(tex2,""),style ) ){oscConnection.SendTestMessage();}
                Texture2D currTex = oscConnection.dispatchOSC ?  texON : texOFF;
                oscConnection.dispatchOSC = GUI.Toggle(r1b, oscConnection.dispatchOSC, new GUIContent(currTex, "Turn the OSC dispatching into Unity on/off"), style);
            }
            else
            {
                GUI.contentColor    = Color.white;
                GUI.backgroundColor = UniOSCUtils.CONNECTION_BG;
                //GUI.Box(area,"");//GUI.skin.box
                GUI.backgroundColor = UniOSCUtils.CONNECTION_OFF_COLOR;
                EditorGUI.HelpBox(area, "OSC IN: " + UniOSCConnection.localIPAddress + "\nPort: " + oscConnection.oscPort + "\nNot listening", MessageType.Warning);
                if (GUI.Button(r1, "Connect"))
                {
                    oscConnection.ConnectOSC();
                }
            }

            _DropArea(evt, area, oscConnection);

            EditorGUILayout.EndVertical();

            #endregion IN



            if (oscConnection.oscOut)
            {
                GUILayout.Space(5f);
                //GUILayout.FlexibleSpace();

                //OUT-------------------------

                EditorGUILayout.BeginVertical(GUILayout.MaxWidth(200f));

                Rect area_out = GUILayoutUtility.GetRect(100.0f, 40.0f); //, GUILayout.ExpandWidth (true)
                area_out.width *= 1f;                                    //0.95f;

                Rect r2 = GUILayoutUtility.GetRect(100.0f, 20.0f);
                r2.width *= 1f;      //0.95f;
                int  btnsize = 20;
                Rect r2b     = new Rect(area_out);
                r2b.x     += r2b.width - (btnsize * 1);
                r2b.y     += r2b.height - btnsize;
                r2b.width  = btnsize * 1;
                r2b.height = btnsize;


                if (oscConnection.isConnectedOut)
                {
                    GUI.contentColor    = Color.white;
                    GUI.backgroundColor = oscConnection.dispatchOSCOut ? UniOSCUtils.CONNECTION_ON_COLOR : UniOSCUtils.CONNECTION_PAUSE_COLOR;
                    EditorGUI.HelpBox(area_out, "OSC OUT: " + oscConnection.oscOutIPAddress + "\nPort: " + oscConnection.oscOutPort + "\nIs sending", MessageType.Info);  //oscConnection.name+

                    if (GUI.Button(r2, "Disconnect"))
                    {
                        oscConnection.DisconnectOSCOut();
                    }

                    GUI.backgroundColor = Color.white;
                    GUI.contentColor    = Color.white;

                    //if ( GUI.Button (r2b,new GUIContent(texTestMessage,""),style ) ){oscConnection.SendTestMessage();}

                    Texture2D currTex = oscConnection.dispatchOSCOut ?  texON : texOFF;
                    oscConnection.dispatchOSCOut = GUI.Toggle(r2b, oscConnection.dispatchOSCOut, new GUIContent(currTex, "Turn the OSC sending from Unity on/off without start/stop the network resources"), style);
                }
                else
                {
                    GUI.backgroundColor = Color.red;
                    GUI.contentColor    = Color.white;
                    EditorGUI.HelpBox(area_out, "OSC OUT: " + oscConnection.oscOutIPAddress + "\nPort: " + oscConnection.oscOutPort + "\nNot sending", MessageType.Warning);          //oscConnection.name+

                    if (GUI.Button(r2, "Connect"))
                    {
                        IPAddress addr;
                        if (UniOSCUtils.ValidateIPAddress(oscConnection.oscOutIPAddress, out addr))
                        {
                            oscConnection.ConnectOSCOut();
                        }
                        else
                        {
                            EditorUtility.DisplayDialog("Invalid IP Address", "The IPAddress you have choosen is not valid! Please use a different.", "OK");
                        }
                        //oscConnection.ConnectOSCOut();
                    }
                }

                _DropArea(evt, area_out, oscConnection);

                EditorGUILayout.EndVertical();
                //OUT--------------------------------
            }            //if(oscConnection.OSCOut){

            GUI.backgroundColor = Color.white;
            GUI.contentColor    = Color.white;



            EditorGUILayout.EndHorizontal();

            if (EditorGUI.EndChangeCheck())
            {
                EditorUtility.SetDirty(oscConnection);
            }
        }
//		void OnGUI(){
//
//		}

        /// <summary>
        /// Renders the GUI of a OSCConnection in the GameView.
        /// This is different from the rendering in the editor/inspector
        /// </summary>
        public void RenderGUI()
        {
            if (UniOSCUtils.TEX_CONNECTION_BG == null)
            {
                UniOSCUtils.TEX_CONNECTION_BG = UniOSCUtils.MakeTexture(2, 2, UniOSCUtils.CONNECTION_BG);
            }

            _gs = new GUIStyle(GUI.skin.box);
            _gs.normal.background = UniOSCUtils.TEX_CONNECTION_BG;
            _gs.fontSize          = 11;

            GUILayout.BeginVertical(_gs);
            #region Header
            GUILayout.BeginHorizontal();
            GUILayout.Label(name);
            GUILayout.EndHorizontal();
            #endregion Header

            GUILayout.BeginHorizontal();

            #region IN
            GUILayout.BeginVertical();

            GUI.backgroundColor = _connected ? UniOSCUtils.CONNECTION_ON_COLOR : UniOSCUtils.CONNECTION_OFF_COLOR;
            GUIContent gc;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("OSC IN");
            sb.AppendLine(String.Format("Port:{0}", oscPort));
            if (_connected)
            {
                sb.AppendLine(String.Format("Listening:{0}", localIPAddress));

                gc = new GUIContent(sb.ToString());

                Rect area = GUILayoutUtility.GetRect(gc, _gs, GUILayout.MinWidth(150f));
                GUI.Box(area, gc, _gs);
            }
            else
            {
                //sb.AppendLine("Not listening");

                GUIStyle _gs2 = new GUIStyle(GUI.skin.label);
                _gs2.normal.background = UniOSCUtils.TEX_CONNECTION_BG;
                _gs2.fontSize          = 11;

                GUILayout.BeginVertical(_gs);

                GUILayout.Label(new GUIContent("OSC IN"), _gs);

                GUILayout.BeginHorizontal(_gs2);
                GUILayout.Label(new GUIContent("Port:"), _gs2);
                gc = new GUIContent("65536");
                Rect areaPort = GUILayoutUtility.GetRect(gc, _gs, GUILayout.MinWidth(20f));
                oscPort = Mathf.Min(UniOSCUtils.MAXPORT, Convert.ToInt32(GUI.TextField(areaPort, oscPort.ToString())));
                GUILayout.EndHorizontal();

                GUILayout.EndVertical();
            }

            GUI.backgroundColor = Color.white;

            if (GUILayout.Button(_connected ? "Disconnect":"Connect"))
            {
                if (_connected)
                {
                    DisconnectOSC();
                }
                else
                {
                    ConnectOSC();
                }
            }

            GUILayout.EndVertical();
            #endregion IN


            GUILayout.Space(5f);

            #region OUT
            GUILayout.BeginVertical();


            GUI.backgroundColor = _connectedOut ? UniOSCUtils.CONNECTION_ON_COLOR : UniOSCUtils.CONNECTION_OFF_COLOR;

            GUIContent    gcOut;
            StringBuilder sb_out = new StringBuilder();
            sb_out.AppendLine("OSC OUT");

            if (_connectedOut)
            {
                sb_out.AppendLine(String.Format("Port:{0}", oscOutPort));
                sb_out.AppendLine(String.Format("Sending:{0}", oscOutIPAddress));
                gcOut = new GUIContent(sb_out.ToString());

                Rect areaOut = GUILayoutUtility.GetRect(gcOut, _gs, GUILayout.MinWidth(150f));              //GUILayoutUtility.GetRect(150,50);

                GUI.Box(areaOut, gcOut, _gs);
            }
            else
            {
                //sb_out.AppendLine(String.Format("Not Sending:{0}",oscOutIPAddress));
                GUIStyle _gs2 = new GUIStyle(GUI.skin.label);
                _gs2.normal.background = UniOSCUtils.TEX_CONNECTION_BG;
                _gs2.fontSize          = 11;

                GUILayout.BeginVertical(_gs);
                GUILayout.Label(new GUIContent("OSC OUT"), _gs);
                GUILayout.BeginHorizontal(_gs2);
                GUILayout.Label(new GUIContent("Port:"), _gs2);
                gc = new GUIContent("65536");
                Rect areaPort = GUILayoutUtility.GetRect(gc, _gs, GUILayout.MinWidth(20f));
                oscOutPort = Mathf.Min(UniOSCUtils.MAXPORT, Convert.ToInt32(GUI.TextField(areaPort, oscOutPort.ToString())));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(_gs2);
                GUILayout.Label(new GUIContent("IP:"), _gs);
                gc = new GUIContent("255.255.255.255");
                Rect areaIp = GUILayoutUtility.GetRect(gc, _gs, GUILayout.MinWidth(100f));
                if (_tfgs == null)
                {
                    _tfgs = new GUIStyle(GUI.skin.textField);
                }
                string oscOutIPAddressTemp = GUI.TextField(areaIp, oscOutIPAddress, _tfgs);

                GUILayout.EndHorizontal();

                IPAddress addr;
                if (UniOSCUtils.ValidateIPAddress(oscOutIPAddressTemp, out addr))
                {
                    //oscOutIPAddress = oscOutIPAddressTemp;
                    _tfgs = new GUIStyle(GUI.skin.textField);
                }
                else
                {
                    //When the IP-Address is invalid we get visual feedback
                    _tfgs.normal.textColor  = new Color(0.8f, 0.0f, 0.0f, 1f);
                    _tfgs.hover.textColor   = new Color(0.9f, 0.0f, 0.0f, 1f);
                    _tfgs.active.textColor  = Color.red;
                    _tfgs.focused.textColor = Color.red;
                }

                oscOutIPAddress = oscOutIPAddressTemp;

                GUILayout.EndVertical();
            }

            GUI.backgroundColor = Color.white;

            if (GUILayout.Button(_connectedOut ? "Disconnect":"Connect"))
            {
                if (_connectedOut)
                {
                    DisconnectOSCOut();
                }
                else
                {
                    ConnectOSCOut();
                }
            }


            GUILayout.EndVertical();
            #endregion OUT

            GUILayout.EndHorizontal();

            #region session
            GUILayout.BeginHorizontal();
            if (hasOSCSessionFileAttached)
            {
                if (!_connectedOut)
                {
                    GUI.backgroundColor = Color.red; GUI.contentColor = Color.red;
                }
                if (GUILayout.Button(new GUIContent("Send Session Data", "Tooltip")))
                {
                    SendSessionData();
                }
                GUI.backgroundColor = Color.white;
                GUI.contentColor    = Color.white;
            }
            GUILayout.EndHorizontal();
            #endregion


            GUILayout.EndVertical();
        }