private RconOperationEventArgs InitResultObject(ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state) { RconOperationEventArgs result; if (locker == null) //async { AsyncRconOperationEventArgs asyncResult = new AsyncRconOperationEventArgs(); asyncResult.Callback = callback; asyncResult.State = state; result = asyncResult; } else //sync { result = new RconOperationEventArgs(); result.Locker = locker; } //result.OperationId = GetOperationId(); return(result); }
private RconOperationEventArgs StartExecuteCommand(string command, ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state) { RconOperationEventArgs evArgs = InitResultObject(locker, callback, state); evArgs.Operation = RconOperationType.ExecuteCommand; int id = GetOperationId(); lock (_currentOperationsLock) _currentOperations.Add(id, evArgs); using (PacketWriter writer = new PacketWriter()) { writer.Write(id); writer.Write(SERVERDATA_EXECCOMMAND); writer.Write(Encoding.ASCII.GetBytes(command)); writer.Write(0); //null terminated string writer.Write(0); //empty SendPacket(writer.Data); } return(evArgs); }
public void ExecuteCommandAsync(string command, AsyncRconOperationDelegate callback, object state = null) { StartExecuteCommand(command, null, callback, state); }
public void ConnectAsync(IPEndPoint ipEndPoint, string rconPassword, AsyncRconOperationDelegate callback, object state = null) { StartConnect(ipEndPoint, rconPassword, null, callback, state); }
private RconOperationEventArgs StartConnect(IPEndPoint ipEndPoint, string rconPassword, ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state) { if (_socket != null && _socket.Connected) { throw new InvalidOperationException("You are already connected! Please disconnect first"); } _currentOperations = new Dictionary <int, RconOperationEventArgs>(); RconOperationEventArgs evArgs = InitResultObject(locker, callback, state); evArgs.Operation = RconOperationType.Connect; _connectOperationId = GetOperationId(); lock (_currentOperationsLock) _currentOperations.Add(_connectOperationId, evArgs); _rconPassword = rconPassword; _socket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _socket.BeginConnect(ipEndPoint, ConnectCallback, null); return(evArgs); }