Example #1
0
    void sendMessage()
    {
        string fullMessage = MultiuserPlugin.objectId + ": " + message;

        if (MultiuserPlugin.mIsServer)
        {
            messageStack.Add(fullMessage); // add users own message to the stack
        }
        // send the message over the network
        MultiuserPlugin.SendMessageOverNetwork(fullMessage);

        //Clean up selection and GUI
        message = null;
        GUI.FocusControl(null);
        Repaint();
    }
 private void OnDestroy()
 {
     MultiuserPlugin.DeleteObject(this);
 }
Example #3
0
    public unsafe static void deserializeMessage(char *ser)
    {
        IntPtr       care   = (IntPtr)ser;
        CharPointer *data   = (CharPointer *)care;
        string       output = Marshal.PtrToStringAnsi((IntPtr)data->mes);

        switch ((Byte)ser[0])
        {
        case (Byte)Message.ID_CONNECTION_ATTEMPT_FAILED:
            Debug.Log("Failed to connect to server");
            break;

        case (Byte)Message.ID_NEW_INCOMING_CONNECTION:
            MultiuserPlugin.handleChatMessage("A new client is connecting");
            MultiuserPlugin.addClient();

            break;

        case (Byte)Message.ID_CONNECTION_REQUEST_ACCEPTED:
            MultiuserEditor.messageStack.Add("You have connected to the server");
            break;

        case (Byte)Message.ID_NO_FREE_INCOMING_CONNECTIONS:
            Debug.Log("Connection Failed, server is FULL");
            break;

        case (Byte)Message.ID_CONNECTION_LOST:
            MultiuserPlugin.handleChatMessage("Someone lost connection");
            break;

        case (Byte)Message.ID_DISCONNECTION:
            if (MultiuserPlugin.mIsServer)
            {
                MultiuserPlugin.handleChatMessage("Client has disconnected");
            }
            else
            {
                MultiuserEditor.messageStack.Add("You have disconnected");
            }
            break;

        case (Byte)Message.LOADLEVEL:
            expectedObjs = deserializeInt(ref output);
            recievedObjs = 0;
            EditorUtility.DisplayProgressBar("Getting Level Data", "", 0);
            break;

        case (Byte)Message.LEVELLOADED:
            ReparentObjects();
            ReparentObjects();
            expectedObjs = -1;
            EditorUtility.ClearProgressBar();

            break;

        case (Byte)Message.GO_DELETE:
            if (MultiuserPlugin.mIsServer)
            {
                MultiuserPlugin.Echo(Message.GO_DELETE, output);
            }
            deleteGO(output);
            break;

        case (Byte)Message.CHAT_MESSAGE:
            MultiuserPlugin.handleChatMessage(output);
            break;

        case (Byte)Message.GO_UPDATE:
            if (expectedObjs > 0)
            {
                recievedObjs++;
                EditorUtility.DisplayProgressBar("Getting Level Data", "Recieved " + recievedObjs, (float)recievedObjs / expectedObjs);
            }
            if (MultiuserPlugin.mIsServer)     //If this instance is a server
            {
                MultiuserPlugin.Echo(Message.GO_UPDATE, output);
            }
            componentSerialize(output);
            //componentSerialize(ser);
            break;

        default:
            int identifier = (Byte)ser[0].GetHashCode();
            Debug.Log("Message with identifier " + identifier.ToString() + " has arrived");
            break;
        }
    }
Example #4
0
    private void OnGUI()
    {
        if (!MultiuserPlugin.mConnected)
        {
            messageStack.Clear();
            if (mode == 1)
            {
                GUILayout.Label("Server Settings:", EditorStyles.boldLabel);
            }
            else
            {
                GUILayout.Label("Client Settings:", EditorStyles.boldLabel);
            }

            // connection port number
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Connection Port Number");
            mPortNum = EditorGUILayout.IntField(mPortNum);

            if (mode == 1)
            {
                // max connected clients
                GUILayout.Label("Max Connected Clients");
                mMaxClients = EditorGUILayout.IntField(mMaxClients);
            }

            EditorGUILayout.EndHorizontal();

            if (mode == 0)
            {
                // IP to connect to
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label("Connection IP");
                mTargetIP = EditorGUILayout.TextField(mTargetIP);

                EditorGUILayout.EndHorizontal();

                // client nickname
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label("Enter nickname:");
                nickName = EditorGUILayout.TextField(nickName);

                EditorGUILayout.EndHorizontal();

                // toggle edit or view mode
                MultiuserPlugin.toolMode = (MultiuserPlugin.mode)EditorGUILayout.EnumPopup("Mode:", MultiuserPlugin.toolMode);
            }
            else
            {
                // autosave interval
                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("Autosave interval");
                ServerUtil.saveInterval = EditorGUILayout.IntField(ServerUtil.saveInterval);
                EditorGUILayout.EndHorizontal();

                // nickname
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label("Enter nickname:");
                nickName = EditorGUILayout.TextField(nickName);

                EditorGUILayout.EndHorizontal();

                // limit autosave to 10 autosaved scenes folder
                limitAutosave = EditorGUILayout.Toggle("Limit Autosave", limitAutosave);
            }

            if (mode == 0) // client
            {
                if (GUILayout.Button("Connect"))
                {
                    // start client
                    MultiuserPlugin.startupClient(mTargetIP, mPortNum);
                    clientID = MultiuserPlugin.clientID;
                    if (nickName == "")
                    {
                        nickName = "Client";
                    }
                    MultiuserPlugin.objectId = nickName;
                }
            }
            else // server
            {
                // start server
                if (GUILayout.Button("Start Server"))
                {
                    MultiuserPlugin.startupServer(mPortNum, mMaxClients);
                    if (nickName == "")
                    {
                        nickName = "Server";
                    }
                    MultiuserPlugin.objectId = nickName;
                }
            }

            if (mode == 1) // server
            {
                // change to client mode
                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("Change to Client Setting"))
                {
                    mode     = 0;
                    nickName = "Client";
                }
                EditorGUILayout.EndHorizontal();
            }
            else // client
            {
                // change to server mode
                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("Change to Server Mode"))
                {
                    mode     = 1;
                    nickName = "Server";
                }
                EditorGUILayout.EndHorizontal();
            }
        }
        else
        {
            //Draw the current stack of messages
            string display = "";
            for (int i = 0; i < messageStack.Count; ++i)
            {
                display = display + messageStack[i] + "\n";
            }

            // view messages
            EditorGUILayout.BeginHorizontal();
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(Screen.width), GUILayout.Height(75));
            EditorGUILayout.TextArea(display, GUILayout.Width(Screen.width), GUILayout.ExpandHeight(true));
            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndHorizontal();

            // send message
            EditorGUILayout.BeginHorizontal();
            Event e        = Event.current;
            bool  enterHit = false;
            if (e.keyCode == KeyCode.Return && message != null)
            {
                enterHit = true;
            }
            message = EditorGUILayout.TextField("Message", message);
            if (GUILayout.Button("Send", GUILayout.Width(50)) || enterHit)
            {
                enterHit = false;
                sendMessage();
            }
            EditorGUILayout.EndHorizontal();

            // sync interval
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Sync Interval (0 for realtime)");
            MultiuserPlugin.syncInterval = EditorGUILayout.FloatField(MultiuserPlugin.syncInterval);
            GUILayout.Label("seconds");

            if (MultiuserPlugin.mIsPaused)
            {
                if (GUILayout.Button("Unpause"))
                {
                    MultiuserPlugin.mIsPaused = false;
                }
                else
                if (GUILayout.Button("Pause"))
                {
                    MultiuserPlugin.mIsPaused = true;
                }
            }

            EditorGUILayout.EndHorizontal();

            // Disconnect button
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Disconnect"))
            {
                MultiuserPlugin.Disconnect();
                if (mode == 0)
                {
                    nickName = "Client";
                }
                else
                {
                    nickName = "Server";
                }
            }
            EditorGUILayout.EndHorizontal();
        }
    }