Beispiel #1
0
    //send data to server
    private List <String> ReadWriteServer()
    {
        List <String> data = new List <String>();

        NetworkStream nwStream = clientInstance.GetStream();
        StreamWriter  writer   = new StreamWriter(nwStream);
        StreamReader  reader   = new StreamReader(writer.BaseStream);

        //write player data
        if (!sentBaseData)
        {
            String command = "n";
            writer.Flush();
            writer.WriteLine(command);
            writer.Flush();
            writer.WriteLine(player.transform.position.x);
            writer.Flush();
            writer.WriteLine(player.transform.position.y);
            writer.Flush();
            writer.WriteLine(player.transform.GetComponent <Rigidbody2D>().rotation);
            writer.Flush();
            writer.WriteLine(type.ToString());
            writer.Flush();
            writer.WriteLine(player.GetComponent <PlayerData>().health + "/" + player.GetComponent <PlayerData>().maxHealth);
            writer.Flush();
            writer.WriteLine(player.transform.Find("Weapon").transform.rotation.z);
            writer.Flush();
            writer.WriteLine(weaponType);
            writer.Flush();
            writer.WriteLine(vestType);
            writer.Flush();
            writer.WriteLine(hatType);
            writer.Flush();
            writer.WriteLine(mouthpieceType);
            writer.Flush();
            writer.WriteLine(eyepieceType);
            writer.Flush();
            writer.WriteLine(playerLevel);
            writer.Flush();

            sentBaseData = true;
        }
        else
        {
            String command = "u";
            writer.Flush();
            writer.WriteLine(command);
            writer.Flush();
            writer.WriteLine(player.transform.position.x);
            writer.Flush();
            writer.WriteLine(player.transform.position.y);
            writer.Flush();
            writer.WriteLine(player.transform.GetComponent <Rigidbody2D>().rotation);
            writer.Flush();
            writer.WriteLine(player.GetComponent <PlayerData>().health + "/" + player.GetComponent <PlayerData>().maxHealth);
            writer.Flush();
            writer.WriteLine(player.transform.Find("Weapon").transform.rotation.z);
            writer.Flush();
        }

        //write bullet data
        foreach (GameObject bullet in bulletsFiredByPlayer)
        {
            if (bullet != null)
            {
                BulletPhysicsScript physics = bullet.GetComponent <BulletPhysicsScript>();

                writer.WriteLine(bullet.transform.position.x);
                writer.Flush();
                writer.WriteLine(bullet.transform.position.y);
                writer.Flush();
                writer.WriteLine(bullet.transform.rotation.eulerAngles.z);
                writer.Flush();
                writer.WriteLine(physics.bulletDamage);
                writer.Flush();
                writer.WriteLine(physics.bulletSpeed);
                writer.Flush();
            }
            else
            {
                continue;
            }
        }
        writer.WriteLine("ENDOFBULLETS");
        writer.Flush();

        //write end
        writer.WriteLine("END");
        writer.Flush();

        //read data
        Stopwatch watch = Stopwatch.StartNew();

        if (nwStream.DataAvailable)
        {
            String line;
            while (!(line = reader.ReadLine()).Equals("END"))
            {
                if (!line.Equals(""))
                {
                    data.Add(line);
                }

                if (line.Equals("") || line == null || watch.ElapsedMilliseconds >= 3000) //fail safe, this is hanging some times
                {
                    break;
                }
            }
        }
        watch.Stop();

        //update ping label
        GameObject.Find("pingText").GetComponent <UnityEngine.UI.Text>().text = watch.ElapsedMilliseconds / amountOfDataPerNewPlayer + "ms";

        return(data);
    }