MTA:Eir/FileSystem/file/readUByte: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| Line 4: | Line 4: | ||
==Syntax== | ==Syntax== | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
unsigned_byte file | unsigned_byte file:readUByte () | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 40: | Line 40: | ||
-- Check what we are dealing with. | -- Check what we are dealing with. | ||
if ( typeName == "boolean") then | if ( typeName == "boolean") then | ||
theFile | theFile:writeBoolean( data ); | ||
elseif ( typeName == "number" ) then | elseif ( typeName == "number" ) then | ||
theFile | theFile:writeDouble( data ); | ||
elseif ( typeName == "string" ) then | elseif ( typeName == "string" ) then | ||
theFile | theFile:writeUShort( #data ); | ||
theFile | theFile:write( data ); | ||
elseif ( typeName == "table" ) then | elseif ( typeName == "table" ) then | ||
-- First write iterated entries of the table. | -- First write iterated entries of the table. | ||
| Line 80: | Line 80: | ||
-- Write the amount of data entries. | -- Write the amount of data entries. | ||
theFile | theFile:writeUInt( entryCount ); | ||
-- Write all data entries. | -- Write all data entries. | ||
Latest revision as of 23:34, 16 January 2022
This function attempts to read an unsigned byte (native type) from a file and returns it. The amount of bytes read should be one.
Syntax
unsigned_byte file:readUByte ()
Returns
Returns the unsigned byte if it was successfully read from the file, false otherwise.
Example
Click to collapse [-]
ClientThis snippet writes a Lua type into a file stream. The lua type can be anything that can be traversed over the network. It must be context-less data.
-- A table specifying descriptor information about Lua types.
local typeDescriptors = {
["boolean"] = { networkId = 0 },
["number"] = { networkId = 1 },
["string"] = { networkId = 2 },
["table"] = { networkId = 3 },
["nil"] = { networkId = 4 }
};
local function isValidNetworkType( typeName )
return not ( typeDescriptors[typeName] == nil );
end
local function writeLuaData( theFile, data )
-- Get the descriptor for the type.
local typeName = rawtype(data);
local info = typeDescriptors[typeName];
-- Some types cannot be transfered over the network.
if not ( info ) then return; end;
-- Write the network identifier.
theFile.writeUByte( info.networkId );
-- Check what we are dealing with.
if ( typeName == "boolean") then
theFile:writeBoolean( data );
elseif ( typeName == "number" ) then
theFile:writeDouble( data );
elseif ( typeName == "string" ) then
theFile:writeUShort( #data );
theFile:write( data );
elseif ( typeName == "table" ) then
-- First write iterated entries of the table.
local numIteration = #data;
do
theFile.writeUInt( numIteration );
local n = 1;
while ( n <= numIteration ) do
writeLuaData( data[n] );
n = n + 1;
end
end
-- Next write the data entries.
do
-- Construct a data entry table.
local dataTable = {};
local entryCount = 0;
for m,n in pairs( data ) do
if ( isValidNetworkType( rawtype( n ) ) ) then
if not ( rawtype( n ) == "number" ) or ( n <= 0 ) or ( n > numIteration ) then
entryCount = entryCount + 1;
dataTable[entryCount] = {
key = m,
value = n
};
end
end
end
-- Write the amount of data entries.
theFile:writeUInt( entryCount );
-- Write all data entries.
for m,n in ipairs( dataTable ) do
writeLuaData( n.key );
writeLuaData( n.value );
end
end
elseif ( typeName == "nil" ) then
-- Do nothing.
end
end
-- task for the reader: write a function to read the Lua data again.