Ejemplo n.º 1
0
    // Use  this for initialization
    void Start()
    {
        PacketQueue.GetInstance().packetLoss = PacketLoss;
        MessageHandler = new ServerMessageHandler(this);
        Thread thread = new Thread(new ThreadStart(ThreadMethod));

        thread.Start();
        SimulateConnections();
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        time     += Time.deltaTime;
        acumTime += Time.deltaTime;

        if (acumTime >= (1.0f / fps))
        {
            frame++;
            acumTime -= (1.0f / fps);
            Packet packet = PacketQueue.GetInstance().PollPacket();
            while (packet != null)
            {
                foreach (var gm in packet.Messages)
                {
                    handler.Handle(gm);
                }
                packet = PacketQueue.GetInstance().PollPacket();
            }

            foreach (var action in player.toSend)
            {
                outgoingMessages.Add(action);
            }
            player.toSend.Clear();

            foreach (var gm in outgoingMessages)
            {
                if (gm.isReliable())
                {
                    if (MessageType.PlayerInput.Equals(gm.type()))
                    {
                        rq.AddQueueWithOutTimeout((ReliableMessage)gm);
                    }
                    else
                    {
                        rq.AddQueueWithTimeout((ReliableMessage)gm, time);
                    }
                }
            }

            Dictionary <int, PlayerSnapshot> currentSnapshot = SnapshotHandler.GetInstance().getSnapshot(time);
            if (currentSnapshot != null)
            {
                SnapshotHandler.GetInstance().updatePlayer(currentSnapshot);
            }

            outgoingMessages.AddRange(rq.MessageToResend(time));
            Debug.Log("Outgoing messages size: " + outgoingMessages.Count);
            if (outgoingMessages.Count > 0)
            {
                Packet p     = new Packet(outgoingMessages);
                byte[] bytes = p.serialize();
                SendUdp(bytes);
                outgoingMessages.Clear();
            }
        }
    }
Ejemplo n.º 3
0
    private void ThreadMethod()
    {
        UdpClient udpClient = new UdpClient(listenPort);

        while (true)
        {
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

            byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
            lock (lockObject)
            {
                PacketQueue.GetInstance().PushPacket(new Packet(receiveBytes, null));
            }
        }
    }
Ejemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        time      += Time.deltaTime;
        acumTime  += Time.deltaTime;
        inputTime += Time.deltaTime;

        Packet packet = PacketQueue.GetInstance().PollPacket();

        while (packet != null)
        {
            ProcessPacket(packet);
            packet = PacketQueue.GetInstance().PollPacket();
        }

        SendReliableMessages();

        SerializeWorld();



        for (int i = 1; i < idCount; i++)
        {
            UpdatePlayer(i, 1.0f / GlobalSettings.Fps);
            if (i <= GlobalSettings.AIPlayers)
            {
                AI.act(players[i]);
            }
        }

        if (acumTime >= (1.0f / snapRate) && players.Count != 0)
        {
            while (acumTime > (1.0f / snapRate))
            {
                acumTime -= (1.0f / snapRate);
            }
            byte[] serializedWorld = SerializeWorld();
            foreach (Connection connection in connections.Keys)
            {
                if (connections[connection] > GlobalSettings.AIPlayers)
                {
                    SendUdp(SourcePort, connection.srcIp.ToString(), GlobalSettings.GamePort, serializedWorld);
                }
            }
        }
    }
Ejemplo n.º 5
0
    private void ThreadMethod()
    {
        UdpClient udpClient = new UdpClient(listenPort);

        while (true)
        {
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

            byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);

            Connection connection = new Connection(RemoteIpEndPoint.Address, RemoteIpEndPoint.Port);
            lock (lockObject)
            {
                data = (byte[])receiveBytes.Clone();
                PacketQueue.GetInstance().PushPacket(new Packet(data, connection));
            }
        }
    }