private void SendJoinToMatchPacket()
        {
            packetWriter.BaseStream.Position = 0;

            packetWriter.Write((byte)PacketType.JoinToMatch);

            udpNetwork.Send(sendBuffer, 0, (int)packetWriter.BaseStream.Position);
        }
예제 #2
0
        protected override void NetworkWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            byte[] operationBytes = Encoding.UTF8.GetBytes(ExchangeHelper.ToString(operation));
            byte[] beSended       = ByteHelper.LinkBytes(operationBytes, beSendedData);

            byte[] receive    = net.Send(beSended, 10000, tryTimes);
            string originData = receive == null?ExchangeHelper.ToString(ExchangeCode.TIME_OUT) : Encoding.UTF8.GetString(receive);

            e.Result = originData;
        }
예제 #3
0
        private void SendCommandsToClient(Client client)
        {
            if (client.lastReceivedTick == commandsHistoryFragmentsStart.Count)
            {
                return;
            }

            packetWriter.BaseStream.Position = 0;

            packetWriter.Write((byte)PacketType.Sync);

            //start tick in packet
            packetWriter.Write(client.lastReceivedTick + 1);

            var fragmentsCountPos = packetWriter.BaseStream.Position;

            packetWriter.BaseStream.Position += sizeof(ushort);

            ushort fragmentsCount = 0;

            for (var i = (int)(client.lastReceivedTick + 1); i <= commandsHistoryFragmentsStart.Count; i++)
            {
                var fragmentStartPos = commandsHistoryFragmentsStart[i - 1];

                var fragmentEndPos = i == commandsHistoryFragmentsStart.Count ? historyWriter.BaseStream.Position : commandsHistoryFragmentsStart[i];

                var fragmentSize = fragmentEndPos - fragmentStartPos;

                if (fragmentSize > sendBuffer.Length - packetWriter.BaseStream.Position)
                {
                    break;
                }

                Buffer.BlockCopy(commandsHistoryBuffer, (int)fragmentStartPos, sendBuffer, (int)packetWriter.BaseStream.Position, (int)fragmentSize);

                packetWriter.BaseStream.Position += fragmentSize;

                fragmentsCount++;
            }

            var endPos = packetWriter.BaseStream.Position;

            packetWriter.BaseStream.Position = fragmentsCountPos;

            packetWriter.Write(fragmentsCount);

            udpNetwork.ApplyEndPointToWriter(client.remoteIpEndPoint);
            udpNetwork.Send(sendBuffer, 0, (int)endPos);
        }