Esempio n. 1
0
        /// <summary>
        /// Socket发送坐标
        /// </summary>
        void SendPlayerWorldMessage()
        {
            //组成新的结构体对象,包括主角坐标旋转等。
            Vector3 PlayerTransform = transform.localPosition;
            Vector3 PlayerRotation  = transform.localRotation.eulerAngles;
            //用short的话是2字节,为了节省包的长度。这里乘以100 避免使用float 4字节。当服务器接受到的时候小数点向前移动两位就是真实的float数据
            short px          = (short)(PlayerTransform.x * 100);
            short py          = (short)(PlayerTransform.y * 100);
            short pz          = (short)(PlayerTransform.z * 100);
            short rx          = (short)(PlayerRotation.x * 100);
            short ry          = (short)(PlayerRotation.y * 100);
            short rz          = (short)(PlayerRotation.z * 100);
            byte  equipID     = 1;
            byte  animationID = 9;
            byte  hp          = 2;

            JFPackage.WorldPackage wordPackage = new JFPackage.WorldPackage(px, py, pz, rx, ry, rz, equipID, animationID, hp);
            //通过Socket发送结构体对象
            mJFsorket.SendMessage(wordPackage);
        }
Esempio n. 2
0
 private void SplitPackage(byte[] bytes, int index)
 {
     //在这里进行拆包,因为一次返回的数据包的数量是不定的
     //所以需要给数据包进行查分。
     while (true)
     {
         //包头是2个字节
         byte[] head            = new byte[2];
         int    headLengthIndex = index + 2;
         //把数据包的前两个字节拷贝出来
         Array.Copy(bytes, index, head, 0, 2);
         //计算包头的长度
         short length = BitConverter.ToInt16(head, 0);
         //当包头的长度大于0 那么需要依次把相同长度的byte数组拷贝出来
         if (length > 0)
         {
             byte[] data = new byte[length];
             //拷贝出这个包的全部字节数
             Array.Copy(bytes, headLengthIndex, data, 0, length);
             //把数据包中的字节数组强制转换成数据包的结构体
             //BytesToStruct()方法就是用来转换的
             //这里需要和你们的服务端程序商量,
             JFPackage.WorldPackage wp = new JFPackage.WorldPackage();
             wp = (JFPackage.WorldPackage)BytesToStruct(data, wp.GetType());
             //把每个包的结构体对象添加至链表中。
             worldpackage.Add(wp);
             //将索引指向下一个包的包头
             index = headLengthIndex + length;
         }
         else
         {
             //如果包头为0表示没有包了,那么跳出循环
             break;
         }
     }
 }