示例#1
0
        public RconOperationEventArgs ExecuteCommand(string command)
        {
            ManualResetEventSlim   locker = new ManualResetEventSlim(false);
            RconOperationEventArgs result = StartExecuteCommand(command, locker, null, null);

            locker.Wait();
            locker.Dispose();
            return(result);
        }
示例#2
0
        public RconOperationEventArgs Connect(IPEndPoint ipEndPoint, string rconPassword)
        {
            ManualResetEventSlim   locker = new ManualResetEventSlim(false);
            RconOperationEventArgs result = StartConnect(ipEndPoint, rconPassword, locker, null, null);

            locker.Wait();
            locker.Dispose();
            return(result);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }