public static double?ReadNullableDouble(this DarkRiftReader reader)
        {
            bool   hasValue = reader.ReadBoolean();
            double?b        = null;

            if (hasValue)
            {
                b = reader.ReadDouble();
            }
            return(b);
        }
        public void ReadDoubleTest()
        {
            // GIVEN a buffer of serialized data
            mockMessageBuffer.Setup(m => m.Buffer).Returns(new byte[] { 0x3f, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            mockMessageBuffer.Setup(m => m.Offset).Returns(0);
            mockMessageBuffer.Setup(m => m.Count).Returns(10);

            // WHEN I read a double from the reader
            double result = reader.ReadDouble();

            // THEN the value is as expected
            Assert.AreEqual(0.75d, result);
        }
    public void MessageReceived(object sender, DarkRift.Client.MessageReceivedEventArgs e)
    {
        using (Message message = e.GetMessage() as Message)
        {
            if (message.Tag == Tags.PlayerDeathTag)
            {
                Debug.Log("called death sucessfully");
                using (DarkRiftReader reader = message.GetReader())
                {
                    ushort  id          = reader.ReadUInt16();
                    Vector3 newPosition = new Vector3(reader.ReadSingle(), reader.ReadSingle(), 0);

                    if (networkPlayers.ContainsKey(id))
                    {
                        networkPlayers[id].gameObject.transform.position = newPosition;
                        networkPlayers[id].SetRadius(1);
                    }
                }
            }
            if (message.Tag == Tags.ClientNameUpdateTag)
            {
                using (DarkRiftReader reader = message.GetReader())
                {
                    Debug.Log("called name refresh");
                    string n  = reader.ReadString();
                    ushort ID = reader.ReadUInt16();

                    GameObject g = networkPlayers[ID].gameObject;
                    if (g.GetComponent <Player>())
                    {
                        g.GetComponent <Player>().pname = n;
                    }
                    else
                    {
                        g.GetComponentInChildren <TextMeshPro>().text = n;
                    }

                    g.GetComponent <SpriteRenderer>().enabled = true;
                }
            }
            if (message.Tag == Tags.SpawnPlayerTag)
            {
                Debug.Log("recieved player creation request");
                spawner.SpawnPlayer(sender, e);
            }
            if (message.Tag == Tags.MovePlayerTag)
            {
                using (DarkRiftReader reader = message.GetReader())
                {
                    ushort  id          = reader.ReadUInt16();
                    Vector3 newPosition = new Vector3(reader.ReadSingle(), reader.ReadSingle(), 0);

                    if (networkPlayers.ContainsKey(id))
                    {
                        networkPlayers[id].SetMovePosition(newPosition);
                    }
                }
            }
            if (message.Tag == Tags.SetRadiusTag)
            {
                Debug.Log("setting radius");
                using (DarkRiftReader reader = message.GetReader())
                {
                    ushort id = reader.ReadUInt16();
                    double r  = reader.ReadDouble();

                    networkPlayers[id].SetRadius((float)r);
                }
                if (message.Tag == Tags.DespawnPlayerTag)
                {
                    spawner.DespawnPlayer(sender, e);
                }
            }
        }
    }