Логичная структура пакетов без магических чисел

This commit is contained in:
RoyceDa
2026-03-16 17:06:25 +02:00
parent ce404188d4
commit a4346679e7
5 changed files with 53 additions and 13 deletions

View File

@@ -3,6 +3,8 @@ package io.g365sfu;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.HashSet; import java.util.HashSet;
import io.g365sfu.net.Outgoing;
/** /**
* Это комната для звонков, она может быть как для двоих участников, так и для групповых звонков. * Это комната для звонков, она может быть как для двоих участников, так и для групповых звонков.
* Комната содержит в себе информацию о том, на каком она SFU сервере, какой у нее ID, кто в ней участвует. * Комната содержит в себе информацию о том, на каком она SFU сервере, какой у нее ID, кто в ней участвует.
@@ -77,7 +79,7 @@ public class Room {
/** /**
* 0x03 - SDP offer * 0x03 - SDP offer
*/ */
buffer.put((byte)0x03); buffer.put(Outgoing.SDP_OFFER_RETRANSLATE);
buffer.putInt(this.roomId.getBytes().length); buffer.putInt(this.roomId.getBytes().length);
buffer.put(this.roomId.getBytes()); buffer.put(this.roomId.getBytes());
buffer.putInt(participantId.getBytes().length); buffer.putInt(participantId.getBytes().length);
@@ -111,7 +113,7 @@ public class Room {
/** /**
* 0x06 - ICE кандидат * 0x06 - ICE кандидат
*/ */
buffer.put((byte)0x06); buffer.put(Outgoing.ICE_CANDIDATE_RETRANSLATE);
buffer.putInt(this.roomId.getBytes().length); buffer.putInt(this.roomId.getBytes().length);
buffer.put(this.roomId.getBytes()); buffer.put(this.roomId.getBytes());
buffer.putInt(participantId.getBytes().length); buffer.putInt(participantId.getBytes().length);
@@ -145,7 +147,7 @@ public class Room {
/** /**
* 0x07 - SDP answer * 0x07 - SDP answer
*/ */
buffer.put((byte)0x07); buffer.put(Outgoing.SDP_ANSWER_RETRANSLATE);
buffer.putInt(this.roomId.getBytes().length); buffer.putInt(this.roomId.getBytes().length);
buffer.put(this.roomId.getBytes()); buffer.put(this.roomId.getBytes());
buffer.putInt(participantId.getBytes().length); buffer.putInt(participantId.getBytes().length);

View File

@@ -12,6 +12,8 @@ import java.util.function.Consumer;
import io.g365sfu.exception.SFUException; import io.g365sfu.exception.SFUException;
import io.g365sfu.exception.SFUHandshakeException; import io.g365sfu.exception.SFUHandshakeException;
import io.g365sfu.net.Incoming;
import io.g365sfu.net.Outgoing;
import io.g365sfu.net.SfuSock; import io.g365sfu.net.SfuSock;
import io.g365sfu.util.StrUtils; import io.g365sfu.util.StrUtils;
import io.g365sfu.webrtc.ICECandidate; import io.g365sfu.webrtc.ICECandidate;
@@ -89,7 +91,7 @@ public class SFU {
return; return;
} }
byte packetId = message.get(0); byte packetId = message.get(0);
if(packetId == 0x02) { if(packetId == Incoming.ROOM_CREATE) {
/** /**
* Ответ на создание комнаты, который содержит ID созданной комнаты * Ответ на создание комнаты, который содержит ID созданной комнаты
*/ */
@@ -103,7 +105,7 @@ public class SFU {
} }
return; return;
} }
if(packetId == 0x04) { if(packetId == Incoming.ICE_CANDIDATE) {
/** /**
* ICE-candidate от сервера SFU для одного из участников комнаты * ICE-candidate от сервера SFU для одного из участников комнаты
*/ */
@@ -125,7 +127,7 @@ public class SFU {
} }
return; return;
} }
if(packetId == 0x05) { if(packetId == Incoming.SDP_ANSWER) {
/** /**
* Ответ на Offer от сервера SFU, который содержит SDP Answer * Ответ на Offer от сервера SFU, который содержит SDP Answer
*/ */
@@ -147,7 +149,7 @@ public class SFU {
} }
return; return;
} }
if(packetId == 0x08) { if(packetId == Incoming.SDP_OFFER) {
/** /**
* Offer от сервера SFU для одного из участников комнаты при renegotiation * Offer от сервера SFU для одного из участников комнаты при renegotiation
*/ */
@@ -217,7 +219,7 @@ public class SFU {
/** /**
* 0x02 - создание комнаты * 0x02 - создание комнаты
*/ */
buffer.put((byte)0x02); buffer.put(Outgoing.ROOM_CREATE);
buffer.putInt(roomId.getBytes().length); buffer.putInt(roomId.getBytes().length);
buffer.put(roomId.getBytes()); buffer.put(roomId.getBytes());
buffer.flip(); buffer.flip();

View File

@@ -0,0 +1,19 @@
package io.g365sfu.net;
public class Incoming {
public static final byte HANDSHAKE_OK = (byte) 0x01;
public static final byte HANDSHAKE_FAILURE = (byte) 0xFF;
public static final byte CONNECTION_ALIVE = (byte) 0xAE;
public static final byte ICE_CANDIDATE = (byte) 0x04;
public static final byte SDP_OFFER = (byte) 0x08;
public static final byte SDP_ANSWER = (byte) 0x05;
public static final byte ROOM_CREATE= (byte) 0x02;
}

View File

@@ -0,0 +1,17 @@
package io.g365sfu.net;
public class Outgoing {
public static final byte HANDSHAKE_EXCHANGE = (byte) 0x01;
public static final byte CONNECTION_ALIVE = (byte) 0xAE;
public static final byte ICE_CANDIDATE_RETRANSLATE = (byte) 0x06;
public static final byte SDP_ANSWER_RETRANSLATE = (byte) 0x07;
public static final byte SDP_OFFER_RETRANSLATE = (byte) 0x03;
public static final byte ROOM_CREATE= (byte) 0x02;
}

View File

@@ -33,7 +33,7 @@ public class SfuSock extends WebSocketClient {
return; return;
} }
byte messageType = bytes.get(); byte messageType = bytes.get();
if(messageType == (byte)0x01) { if(messageType == Incoming.HANDSHAKE_OK) {
/** /**
* Сервер ответил на рукопожатие, и мы можем считать его успешным * Сервер ответил на рукопожатие, и мы можем считать его успешным
*/ */
@@ -41,7 +41,7 @@ public class SfuSock extends WebSocketClient {
return; return;
} }
if(messageType == (byte)0xFF) { if(messageType == Incoming.HANDSHAKE_FAILURE) {
/** /**
* Сервер отклонил рукопожатие, и мы должны считать его неудачным * Сервер отклонил рукопожатие, и мы должны считать его неудачным
*/ */
@@ -49,7 +49,7 @@ public class SfuSock extends WebSocketClient {
return; return;
} }
if(messageType == (byte)0xAE) { if(messageType == Incoming.CONNECTION_ALIVE) {
/** /**
* Сервер отправил сообщение о том, что соединение живое (ответ на проверку соединения), и мы можем считать его успешным * Сервер отправил сообщение о том, что соединение живое (ответ на проверку соединения), и мы можем считать его успешным
*/ */
@@ -103,7 +103,7 @@ public class SfuSock extends WebSocketClient {
/** /**
* 0x01 - код рукопожатия в соотвествии с протоколом g365sfu, за которым следует секретный ключ в виде строки байтов * 0x01 - код рукопожатия в соотвествии с протоколом g365sfu, за которым следует секретный ключ в виде строки байтов
*/ */
buffer.put((byte)0x01); buffer.put(Outgoing.HANDSHAKE_EXCHANGE);
buffer.putInt(secretKey.getBytes().length); buffer.putInt(secretKey.getBytes().length);
buffer.put(secretKey.getBytes()); buffer.put(secretKey.getBytes());
buffer.flip(); buffer.flip();
@@ -133,7 +133,7 @@ public class SfuSock extends WebSocketClient {
/** /**
* 0x08 - код проверки соединения в соотвествии с протоколом g365sfu * 0x08 - код проверки соединения в соотвествии с протоколом g365sfu
*/ */
buffer.put((byte)0xAE); buffer.put(Outgoing.CONNECTION_ALIVE);
buffer.flip(); buffer.flip();
this.send(buffer); this.send(buffer);
try { try {