Anonymous
Как десериализовать UDPTunnel в protobuf.net
Сообщение
Anonymous » 12 ноя 2024, 20:48
Я создаю клиентский код VoIP с помощью Mumble в Unity3d (скрипты C#), и теперь я могу успешно подключиться к любому общедоступному серверу Mumble. Но когда я пытаюсь десериализовать UDP-туннель, я получаю множество исключений, включая «неверный тип провода», «переполнение номера», «недопустимое поле», «конец потока», «завершена неправильная группа» и бла-бла... все такое. именно в этой строке.
Код: Выделить всё
var udpTunnel = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian);
где _ssl — это SslStream
Вот мой полный метод
Код: Выделить всё
internal void ProcessTcpData ()
{
try {
var masg = IPAddress.NetworkToHostOrder (_reader.ReadInt16 ());
MessageType messageType = (MessageType)masg;
Debug.Log ("Received message type: " + messageType);
switch (messageType) {
case MessageType.Version:
_mc.RemoteVersion = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
break;
case MessageType.CryptSetup:
var cryptSetup = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
ProcessCryptSetup (cryptSetup);
break;
case MessageType.CodecVersion:
_mc.CodecVersion = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
break;
case MessageType.ChannelState:
_mc.ChannelState = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
break;
case MessageType.PermissionQuery:
_mc.PermissionQuery = Serializer.DeserializeWithLengthPrefix
(_ssl,
PrefixStyle.Fixed32BigEndian);
break;
case MessageType.UserState:
_mc.UserState = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
break;
case MessageType.ServerSync:
_mc.ServerSync = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
_mc.ConnectionSetupFinished = true;
break;
case MessageType.ServerConfig:
_mc.ServerConfig = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
_validConnection = true; // handshake complete
break;
case MessageType.TextMessage:
var textMessage = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian);
break;
case MessageType.UDPTunnel:
if (_validConnection) {
var udpTunnel = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian);
}
break;
case MessageType.Ping:
var ping = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian);
Debug.Log ("Received ping: " + ping.timestamp + ", udp: " + ping.udp_packets + ", tcp:" +
ping.tcp_packets);
break;
case MessageType.Reject:
var reject = Serializer.DeserializeWithLengthPrefix (_ssl,
PrefixStyle.Fixed32BigEndian);
_validConnection = false;
_errorCallback ("Mumble server reject: " + reject.reason, true);
break;
default:
_errorCallback ("Message type " + messageType + " not implemented", true);
break;
}
if (_validConnection) {
Debug.Log ("Handshake Complete:\tconnection is valid");
}
} catch (Exception ex) {
Debug.LogException (ex);
}
}
_reader — это BinaryReader
Подробнее здесь:
https://stackoverflow.com/questions/242 ... otobuf-net
1731433732
Anonymous
Я создаю клиентский код VoIP с помощью Mumble в Unity3d (скрипты C#), и теперь я могу успешно подключиться к любому общедоступному серверу Mumble. Но когда я пытаюсь десериализовать UDP-туннель, я получаю множество исключений, включая «неверный тип провода», «переполнение номера», «недопустимое поле», «конец потока», «завершена неправильная группа» и бла-бла... все такое. именно в этой строке. [code]var udpTunnel = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); [/code] где _ssl — это SslStream Вот мой полный метод [code]internal void ProcessTcpData () { try { var masg = IPAddress.NetworkToHostOrder (_reader.ReadInt16 ()); MessageType messageType = (MessageType)masg; Debug.Log ("Received message type: " + messageType); switch (messageType) { case MessageType.Version: _mc.RemoteVersion = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.CryptSetup: var cryptSetup = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); ProcessCryptSetup (cryptSetup); break; case MessageType.CodecVersion: _mc.CodecVersion = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.ChannelState: _mc.ChannelState = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.PermissionQuery: _mc.PermissionQuery = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.UserState: _mc.UserState = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.ServerSync: _mc.ServerSync = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); _mc.ConnectionSetupFinished = true; break; case MessageType.ServerConfig: _mc.ServerConfig = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); _validConnection = true; // handshake complete break; case MessageType.TextMessage: var textMessage = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); break; case MessageType.UDPTunnel: if (_validConnection) { var udpTunnel = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); } break; case MessageType.Ping: var ping = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); Debug.Log ("Received ping: " + ping.timestamp + ", udp: " + ping.udp_packets + ", tcp:" + ping.tcp_packets); break; case MessageType.Reject: var reject = Serializer.DeserializeWithLengthPrefix (_ssl, PrefixStyle.Fixed32BigEndian); _validConnection = false; _errorCallback ("Mumble server reject: " + reject.reason, true); break; default: _errorCallback ("Message type " + messageType + " not implemented", true); break; } if (_validConnection) { Debug.Log ("Handshake Complete:\tconnection is valid"); } } catch (Exception ex) { Debug.LogException (ex); } } [/code] _reader — это BinaryReader Подробнее здесь: [url]https://stackoverflow.com/questions/24293002/how-to-deserialize-a-udptunnel-in-protobuf-net[/url]