예제 #1
0
	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;
	}
예제 #2
0
        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;
			}
		}
	}
예제 #4
0
	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";
			}
		}
	}
예제 #5
0
    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()}");
            }
        }
    }