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); }
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; } }
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(); } }