Exemple #1
0
    //processes incoming messages
    public void recieveMessage(NetworkStructs.StringData data)
    {
        if (chatBox.activeSelf == false)
        {
            chatBox.SetActive(true);
        }

        chatPanel.GetComponent <TextMeshProUGUI>().text += "\n";
        chatPanel.GetComponent <TextMeshProUGUI>().text += data.str;
    }
Exemple #2
0
    //send chat messages and admin commands
    public void sendMessage(string msg, int channelID)
    {
        if (msg.StartsWith("/"))
        {
            NetworkStructs.StringData message = new NetworkStructs.StringData(msg);
            Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.ADMIN, NetworkStructs.getBytes(message)), channelID);
        }
        else
        {
            msg = "[" + playerName + "]: " + msg;
            NetworkStructs.StringData message = new NetworkStructs.StringData(msg);

            Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.MESSAGE, NetworkStructs.getBytes(message)), channelID);
        }
    }
Exemple #3
0
    //handles the admin commands
    private void adminCommands(string msg, int cnnID)
    {
        if (msg.Contains("/setjump"))
        {
            //actually set the jump and output the change to the server log
            string number = msg.Substring(8);
            NetworkStructs.StringData data = new NetworkStructs.StringData("Setting player jump height to: " + number);
            serverConsole.AddToConsole("Setting player jump height to: " + number);
            Send(NetworkStructs.getBytes(data), reliableChannel, cnnID);

            //adds a number to the front of the message to function as a tag rather than setting up a whole new message type
            string messageToSend = "1";
            messageToSend += number;
            data           = new NetworkStructs.StringData(messageToSend);
            Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.ADMIN, NetworkStructs.getBytes(data)), reliableChannel);
        }
        else if (msg.Contains("/setspeed"))
        {
            //actually change the player speed and output the change to the server log
            string number = msg.Substring(9);
            NetworkStructs.StringData data = new NetworkStructs.StringData("Setting player move speed to: " + number);
            serverConsole.AddToConsole("Setting player move speed to: " + number);
            Send(NetworkStructs.getBytes(data), reliableChannel, cnnID);

            //adds a number to the front of the message to function as a tag rather than setting up a whole new message type
            string messageToSend = "2";
            messageToSend += number;
            data           = new NetworkStructs.StringData(messageToSend);
            Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.ADMIN, NetworkStructs.getBytes(data)), reliableChannel);
        }
        else
        {
            //send message to the server logs that the command doesn't exist, along with what the passed in command was
            NetworkStructs.StringData data = new NetworkStructs.StringData("Command: " + msg + " :Doesn't exist!");
            serverConsole.AddToConsole("Command: " + msg + " :Doesn't exist!");

            //this will send to just the player who sent the commnad (i think)
            Send(NetworkStructs.getBytes(data), reliableChannel, cnnID);
        }
    }
Exemple #4
0
    //when the server pings the player for their name
    private void OnAskName(NetworkStructs.NameRequestData data)
    {
        //set this clients ID
        ourClientId = data.id;

        NetworkStructs.StringData msg = new NetworkStructs.StringData(playerName);

        //Send our name to the server
        Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.NAMEIS, NetworkStructs.getBytes(msg)), reliableChannel);

        string[] connectionList = data.str.Split('|');

        //Create all the other players
        for (int i = 0; i < connectionList.Length; ++i)
        {
            string[] d = connectionList[i].Split('%');
            if (int.Parse(d[1]) != ourClientId)
            {
                SpawnPlayer(d[0], int.Parse(d[1]));
            }
        }
    }
Exemple #5
0
    private void Update()
    {
        if (!isStarted)
        {
            return;
        }

        int recHostId;
        int connectionId;
        int channelId;

        byte[]           recBuffer  = new byte[1024];
        int              bufferSize = 1024;
        int              dataSize;
        byte             error;
        NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);

        switch (recData)
        {
        //case NetworkEventType.Nothing: break;

        case NetworkEventType.ConnectEvent:
        {
            //Debug.Log("Player " + connectionId + " has connected");
            serverConsole.AddToConsole("Player " + connectionId + " has connected");
            OnConnection(connectionId);
        }
        break;

        case NetworkEventType.DataEvent:
        {
            NetworkStructs.MessageTypes type = (NetworkStructs.MessageTypes)recBuffer[0];

            //string msg = Encoding.Unicode.GetString(recBuffer, 0, dataSize);
            //Debug.Log("Receiving from " + connectionId + " : " + msg);
            //serverConsole.AddToConsole("Receiving from " + connectionId + " : " + msg);

            byte[] packet = new byte[1024];
            Array.Copy(recBuffer, 1, packet, 0, bufferSize - 1);

            switch (type)
            {
            case NetworkStructs.MessageTypes.NAMEIS:
            {
                NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet);
                OnNameIs(connectionId, data.str);
            }
            break;

            case NetworkStructs.MessageTypes.ROT:
            {
                NetworkStructs.RotationData data = NetworkStructs.fromBytes <NetworkStructs.RotationData>(packet);
                OnRotationChange(connectionId, data);
            }
            break;

            case NetworkStructs.MessageTypes.MOVE:
            {
                NetworkStructs.PositionVelocityData data = NetworkStructs.fromBytes <NetworkStructs.PositionVelocityData>(packet);
                OnMovement(connectionId, data);
            }
            break;

            case NetworkStructs.MessageTypes.SETUPAI:
            {
                NetworkStructs.AIInitialMoveData data = NetworkStructs.fromBytes <NetworkStructs.AIInitialMoveData>(packet);
                OnAISetup(data);
            }
            break;

            case NetworkStructs.MessageTypes.MESSAGE:
                Send(recBuffer, reliableChannel);
                break;

            case NetworkStructs.MessageTypes.ADMIN:
            {
                NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet);
                adminCommands(data.str, connectionId);
            }
            break;

            default:             //invalid key case
                //Debug.Log("INVALID SERVER MESSAGE : ");
                serverConsole.AddToConsole("INVALID SERVER MESSAGE : ");
                break;
            }
        }
        break;

        case NetworkEventType.DisconnectEvent:
        {
            //Debug.Log("Player " + connectionId + " has disconnected");
            serverConsole.AddToConsole("Player " + connectionId + " has disconnected");
            OnDisconnection(connectionId);
        }
        break;

        case NetworkEventType.BroadcastEvent:
        {
        }
        break;
        }

        AIPositionUpdate();
    }
Exemple #6
0
    private void Update()
    {
        //make sure the player is connected to the server and if they are reveal the chatbox
        if (!isConnected)
        {
            return;
        }
        else
        {
            chatBox.SetActive(true);
        }

        //message event handlers
        int recHostId;
        int connectionId;
        int channelId;

        byte[]           recBuffer  = new byte[1024];
        int              bufferSize = 1024;
        int              dataSize;
        byte             error;
        NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);

        switch (recData)
        {
        case NetworkEventType.DataEvent:
        {
            NetworkStructs.MessageTypes type = (NetworkStructs.MessageTypes)recBuffer[0];

            byte[] packet = new byte[1024];
            Array.Copy(recBuffer, 1, packet, 0, bufferSize - 1);

            switch (type)
            {
            case NetworkStructs.MessageTypes.ASKNAME:             //get username
            {
                NetworkStructs.NameRequestData data = NetworkStructs.fromBytes <NetworkStructs.NameRequestData>(packet);
                OnAskName(data);
            }
            break;

            case NetworkStructs.MessageTypes.CNN:             //connection
            {
                NetworkStructs.NameRequestData data = NetworkStructs.fromBytes <NetworkStructs.NameRequestData>(packet);
                SpawnPlayer(data.str, data.id);
                //CallAIs();
                SetupAIs();
            }
            break;

            case NetworkStructs.MessageTypes.DC:             //disconnection
            {
                NetworkStructs.IntData data = NetworkStructs.fromBytes <NetworkStructs.IntData>(packet);
                PlayerDisconnected(data.data);
            }
            break;

            case NetworkStructs.MessageTypes.MOVE:
            {
                NetworkStructs.PositionVelocityData data = NetworkStructs.fromBytes <NetworkStructs.PositionVelocityData>(packet);
                MovementDetected(data);
            }
            break;

            case NetworkStructs.MessageTypes.ROT:
            {
                NetworkStructs.RotationData data = NetworkStructs.fromBytes <NetworkStructs.RotationData>(packet);
                RotationgDetected(data);
            }
            break;

            case NetworkStructs.MessageTypes.MOVEAI:
            {
                NetworkStructs.AIMoveData data = NetworkStructs.fromBytes <NetworkStructs.AIMoveData>(packet);
                AIMoveDetected(data);
            }
            break;

            case NetworkStructs.MessageTypes.MESSAGE:
            {
                NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet);
                recieveMessage(data);
            }
            break;

            case NetworkStructs.MessageTypes.ADMIN:
            {
                NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet);
                adminCommands(data.str, ourClientId);
            }
            break;

            default:             //invalid key case
                //Debug.Log("INVALID CLIENT MESSAGE : " + msg);
                break;
            }
        }
        break;

        case NetworkEventType.BroadcastEvent:
        {
        }
        break;
        }
    }