示例#1
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="stateFlag">状态</param>
        /// <param name="protocolID">消息ID</param>
        /// <param name="message">消息内容</param>
        public void SendMessage(ushort protocolID, byte[] message, byte parseType = 1, byte stateFlag = 134)
        {
            if (m_serverAddress == null)
            {
                Debug.LogWarningFormat("when send message m_serverAddress == null");
                return;
            }
            ConnectionState clientState = mClient.GetConnectionState(m_serverAddress);

            if (clientState != ConnectionState.IS_CONNECTED)
            {
                Debug.LogWarningFormat("The net connect was not success when you send message[Protocol:{0}], please check it!", protocolID);
                return;
            }

            byte[] protocolBytes      = System.BitConverter.GetBytes(protocolID);
            byte[] messageLengthBytes = System.BitConverter.GetBytes((ushort)message.Length);
            byte[] dataBytes          = new byte[PROTOCOL_SIZE + message.Length];
            // 写入状态标志
            dataBytes[0] = stateFlag;
            // 写入解析方式
            dataBytes[1] = parseType;
            int startIndex = 2;

            // 写入协议编号
            Array.Copy(protocolBytes, 0, dataBytes, startIndex, protocolBytes.Length);
            startIndex += protocolBytes.Length;
            // 写入消息长度
            Array.Copy(messageLengthBytes, 0, dataBytes, startIndex, messageLengthBytes.Length);
            startIndex += messageLengthBytes.Length;
            // 写入消息内容
            Array.Copy(message, 0, dataBytes, startIndex, message.Length);
            //uint sendRet = mClient.Send(dataBytes, dataBytes.Length, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, m_serverAddress, false);
            mClient.Send(dataBytes, dataBytes.Length, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, m_serverAddress, false);
        }
示例#2
0
 public void Send(RakNet.BitStream bsIn, char orderingChannel)
 {
     if (_peer != null)
     {
         uint sendLength = _peer.Send(bsIn, RakNet.PacketPriority.IMMEDIATE_PRIORITY, RakNet.PacketReliability.RELIABLE_ORDERED, orderingChannel, _systemAddress, false);
         Log.Debug("sendLength:" + sendLength);
     }
 }
示例#3
0
    private void sendNewClientID(RakNet.RakPeerInterface rakPeerInterface, ref RakNet.SystemAddress address)
    {
        RakNet.BitStream bitstream;
        bitstream = new RakNet.BitStream();
        bitstream.Write(nextClientID);
        nextClientID++;

        rakPeerInterface.Send(bitstream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, address, false);
    }
示例#4
0
    void sendClientPing(RakNet.RakPeerInterface rakPeerInterface)
    {
        while (true)
        {
            //Use unity console instead.
            RakNet.BitStream bitStream;
            bitStream = new RakNet.BitStream();
            bitStream.Write((char)ENUMGAMEMESSAGES.ID_SERVER_TEXT_MESSAGE);
            bitStream.Write("Ping!");

            rakPeerInterface.Send(bitStream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0,
                                  RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
            Thread.Sleep(1000);
        }
    }
示例#5
0
    private void handleNetworkMessages(RakNet.RakPeerInterface rakPeerInterface)
    {
        RakNet.Packet packet;
        packet = null;

        while (true)
        {
            for (packet = rakPeerInterface.Receive(); packet != null;
                 rakPeerInterface.DeallocatePacket(packet),
                 packet = rakPeerInterface.Receive())
            {
                switch (packet.data[0])
                {
                case (int)RakNet.DefaultMessageIDTypes.ID_NEW_INCOMING_CONNECTION:
                    Debug.Log("A connection is incoming.");
                    SystemAddress sa = packet.systemAddress;
                    sendNewClientID(rakPeerInterface, ref sa);
                    packet.systemAddress = sa;
                    break;

                case (int)RakNet.DefaultMessageIDTypes.ID_DISCONNECTION_NOTIFICATION:
                    Debug.Log("A client has disconnected.");
                    break;

                case (int)RakNet.DefaultMessageIDTypes.ID_CONNECTION_LOST:
                    Debug.Log("A client has lost the connection.");
                    break;

                case (int)GameMessages.ENUMGAMEMESSAGES.ID_CLIENT_CLIENT_DATA:
                {
                    RakNet.BitStream bitStream;
                    bitStream = new RakNet.BitStream(packet.data, packet.length, false);
                    rakPeerInterface.Send(bitStream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED,
                                          (char)0, packet.systemAddress, true);
                    break;
                }

                default:
                    Debug.Log("Recieved a message with unknown id:");
                    Debug.Log(packet.data[0]);
                    break;
                }
            }
        }
    }
示例#6
0
        static void ProcessMessage(RakPeerInterface peer, RakNet.Packet packet)
        {
            if (packet != null)
            {
                if (packet.data[0] == (byte)(FT_MessageTypes.ID_SERVER_LOGIN))
                {
                    BitStream receiveBitStream = new BitStream();
                    receiveBitStream.Write(packet.data, packet.length);
                    receiveBitStream.IgnoreBytes(2);
                    FT_UnitData data = new FT_UnitData();
                    data.Serialize(false, receiveBitStream);
                    Log.Debug(" data.nGrid_x: " + data.nGrid_x);

                    BitStream writeBitStream = new BitStream();
                    writeBitStream.Write((byte)FT_MessageTypes.ID_SERVER_LOGIN);
                    writeBitStream.Write((byte)FT_MessageTypesNode.NODE_FT_TEST1);
                    data.Serialize(true, writeBitStream);
                    uint sendLength = peer.Send(writeBitStream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, packet.systemAddress, false);
                    Log.Debug("SendLength = " + sendLength);
                }
            }
        }