protected bool WrapMessage( InternalMessage message, MessageSecurity security, BitWriter writer, byte[] key, out string error ) { if( !_commonSettings.enableEncryption && security != MessageSecurity.None ) { error = "Attempted to send encrypted and/or authenticated message but encryption was not enabled"; return false; } bool authenticated = ((security & MessageSecurity.Authenticated) != 0); bool encrypted = ((security & MessageSecurity.Encrypted ) != 0); if( authenticated || encrypted ) { Debug.Assert( false ); // TODO: handle encryption and authentication here error = "WrapMessage: tried to apply encryption, but it was not enabled."; return false; } DataStream writerStream = writer.GetStream(); int lastBytePos = writerStream.GetBytePosition(); // reset write head to write authentication and encryption bits writer.Normal(authenticated); writer.Normal(encrypted); writerStream.SetBytePosition( lastBytePos ); byte messageByte = (byte)(((int)message) << 2); writer.Normal<byte>( messageByte ); error = null; return true; }
public void Write(BitWriter writer) { writer.Normal <byte>((byte)_type); writer.Packed <UInt32>(_frame); writer.Packed <UInt32>(_id); writer.Packed <UInt16>((UInt16)_events.Count); for (int i = 0; i < _events.Count; ++i) { _events[i].Write(writer); } }
void SendRoomNameRequest() { _settings.display.text += "Successfully connected to server, sending request for room name.\n"; using( BitWriter writer = _network.GetPooledWriter() ) { writer.Normal<byte>( (byte)CustomMessageType.RoomNameRequest ); string error; if( !_network.SendCustomServer( writer, false, out error ) ) { _settings.display.text += $"Failed to send room request: \n{error}\n\n"; } else { _sentRoomNameRequest = true; } } }
public void OnEnter() { _settings.Show(); _network.SetOnEntitySpawn( OnEntitySpawn ); _exitTime = float.MaxValue; using( BitWriter writer = _network.GetPooledWriter() ) { writer.Normal<byte>( (byte)CustomMessageType.SpawnAvatarRequest ); string error; if( _network.SendCustomServer( writer, true, out error ) ) { _settings.display.text = "Sent spawn request to server, waiting for reply...\n\n"; } else { _settings.display.text = $"Failed to send spawn request, error:\n{error}\n\n"; } } }
void SendRoomNameResponse(NodeIndex clientIndex) { using (BitWriter writer = _network.GetPooledWriter()) { writer.Normal <byte>((byte)CustomMessageType.RoomNameResponse); _sb.Clear(); _sb.Append(_world.GetRoomName()); int length = _sb.Length; _sb.CopyTo(0, _charBuffer, 0, length); writer.ArrayPacked <char>(_charBuffer, length); string error; if (!_network.SendCustomClient(clientIndex, writer, false, out error)) { Log.Error($"Failed to send RoomNameResponse to client {clientIndex.GetClientIndex()}, error:\n{error}\n"); } else { Log.Info($"Sent room name: {_world.GetRoomName()} to client: {clientIndex.GetClientIndex()}"); } } }