Created
July 30, 2018 15:18
-
-
Save Hexer10/ac5dccebb450b73f5064c844e2eea0f2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:io'; | |
import 'dart:convert'; | |
import 'dart:typed_data'; | |
Socket socket; | |
int _id = 1; | |
const int SERVERDATA_AUTH = 3; | |
const int SERVERDATA_AUTH_RESPONSE = 2; | |
const int SERVERDATA_EXECCOMMAND = 2; | |
const int SERVERDATA_RESPONSE_VALUE = 0; | |
void main() async { | |
socket = await Socket.connect('hexah.net', 27015); | |
await socket.listen(onSocketData, onError: onError, onDone: onDone); | |
await _write(SERVERDATA_AUTH, 'foo'); | |
} | |
void _write(int type, String body) async { | |
var bodyASCII = ascii.encode(body); //Get ASCII string with Null terminator | |
// Should I use this or the other way? ?? | |
var size = bodyASCII.length + 14; | |
var buffer = new Int8List(size).buffer; | |
var bdata = new ByteData.view(buffer); | |
bdata.setInt32(0, size - 4, Endian.little); //Byte requests length (32bit le signed int). | |
bdata.setInt32(4, _id, Endian.little); //Any integer (32bit le signed int). | |
bdata.setInt32(8, type, Endian.little); //Valid values: SERVERDATA_* (32bit le signed int). | |
int writepos = 12; | |
await bodyASCII.forEach((element) { | |
bdata.setInt8(writepos, element); | |
writepos +=1; | |
}); | |
bdata.setInt16(size-2, 0, Endian.little); //Write the null terminators | |
await socket.write(bdata); | |
_id++; | |
} | |
void onSocketData(var data){ | |
print(data); | |
} | |
void onError(var data, StackTrace stack){ | |
print(stack); | |
} | |
void onDone(){ | |
print('Connection terminated'); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment