/// <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); }
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); } }
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); }
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); } }
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; } } } }
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); } } }