Ejemplo n.º 1
0
    private IEnumerator waitThenReconnect(float waitTime, string remoteAddress, int remotePort)
    {
        timeUntilStartServer = 1000.0f;
        yield return(new WaitForSeconds(waitTime));

        while (clientSocket < 0 && port > 8870)   // limit to 16 players max
        {
            clientSocket = NetworkTransport.AddHost(topology, --port);
        }
        if (port <= 8870)   // just incase this happens
        {
            Debug.Log("CLIENT: no open ports, quiting");
            ResetToMenu.Reset();
            yield break;
        }
        Debug.Log("CLIENT: reconnected on port: " + port);
        byte error;

        serverSocket = NetworkTransport.Connect(clientSocket, remoteAddress, remotePort, 0, out error);

        // set up UI for login
        menuUI.setupLoginUI();

        // can delete server script now if not used
        if (!enabledServer)
        {
            Destroy(gameObject.GetComponent <GameServer>());
        }
    }
    void OnEnable()
    {
        Application.runInBackground = true; // for debugging purposes
        //Destroy(gameObject.GetComponent<GameClient>());
        DontDestroyOnLoad(gameObject);
        // start up database
        dbUtil = gameObject.AddComponent <DatabaseUtil>();

        NetworkTransport.Init();
        ConnectionConfig config = new ConnectionConfig();

        channelReliable = config.AddChannel(QosType.ReliableSequenced);
        HostTopology topology = new HostTopology(config, maxConnections);

        serverSocket = NetworkTransport.AddHost(topology, port);
        Debug.Log("SERVER: socket opened: " + serverSocket);

        Packet p = new Packet(PacketType.MESSAGE);

        p.Write("Hi its the server broadcasting!");

        byte error;
        bool success = NetworkTransport.StartBroadcastDiscovery(
            serverSocket, port - 1, key, version, subversion, p.getData(), p.getSize(), 500, out error);

        if (!success)
        {
            Debug.Log("SERVER: start broadcast discovery failed!");
            ResetToMenu.Reset();
        }
        else if (NetworkTransport.IsBroadcastDiscoveryRunning())
        {
            Debug.Log("SERVER: started and broadcasting");
        }
        else
        {
            Debug.Log("SERVER: started but not broadcasting!");
        }

        // create lobby room at index 0
        rooms.Add(new Room("Lobby"));
    }
Ejemplo n.º 3
0
    private void checkMessages()
    {
        if (clientSocket < 0)
        {
            return;
        }

        int recConnectionID;    // rec stands for received
        int recChannelID;
        int bsize = 1024;

        byte[] buffer = new byte[bsize];
        int    dataSize;
        byte   error;

        // continuously loop until there are no more messages
        while (true)
        {
            if (waitToCheckMessages)
            {
                return;
            }
            NetworkEventType recEvent = NetworkTransport.ReceiveFromHost(
                clientSocket, out recConnectionID, out recChannelID, buffer, bsize, out dataSize, out error);
            switch (recEvent)
            {
            case NetworkEventType.Nothing:
                return;

            case NetworkEventType.DataEvent:
                receivePacket(new Packet(buffer));
                break;

            case NetworkEventType.BroadcastEvent:
                if (serverSocket >= 0)       // already connected to a server
                {
                    break;
                }
                menuUI.stopStatusTextAnim();
                Debug.Log("CLIENT: found server broadcast!");
                string statusText = !enabledServer ? "Found Server!" : "Created Server!";
                menuUI.setStatusText(statusText, Color.yellow, true);

                // get broadcast message (not doing anything with it currently)
                NetworkTransport.GetBroadcastConnectionMessage(clientSocket, buffer, bsize, out dataSize, out error);

                // connect to broadcaster by port and address
                int    broadcastPort;
                string broadcastAddress;
                NetworkTransport.GetBroadcastConnectionInfo(clientSocket, out broadcastAddress, out broadcastPort, out error);

                // close client socket on port 8887 so new clients on this comp can connect to broadcast port
                NetworkTransport.RemoveHost(clientSocket);
                clientSocket = -1;
                // reconnect in one second since RemoveHost kind of times out the network momentarily
                StartCoroutine(waitThenReconnect(0.5f, broadcastAddress, broadcastPort));

                return;

            case NetworkEventType.ConnectEvent:
                Debug.Log("CLIENT: connected to server");
                break;

            case NetworkEventType.DisconnectEvent:
                Debug.Log("CLIENT: disconnected from server");
                ResetToMenu.Reset();
                break;

            default:
                break;
            }
        }
    }