Exemplo n.º 1
0
        /// <summary>
        /// Send query asynchronous
        /// </summary>
        /// <param name="requestType">Request type</param>
        private void SendQueryAsync(ERequestResponseType requestType)
        {
            int index = (int)requestType;

            threads[index] = new Thread(() => SendQuery(requestType));
            requestsRequired.SetLastRequestTime(requestType);
            threads[index].Start();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Send query when expired
        /// </summary>
        /// <param name="requestType">Request type</param>
        /// <param name="milliseconds">Milliseconds</param>
        /// <returns>"true" if attempted sending query, othewrwise "false"</returns>
        public bool SendQueryWhenExpiredAsync(ERequestResponseType requestType, uint milliseconds)
        {
            uint t   = (uint)(DateTime.Now.Subtract(requestsRequired.GetLastRequestTime(requestType)).TotalMilliseconds);
            bool ret = (t >= milliseconds);

            if (ret)
            {
                SendQueryAsync(requestType);
            }
            return(ret);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Abort thread
 /// </summary>
 /// <param name="requestType"></param>
 private void AbortThread(ERequestResponseType requestType)
 {
     lock (threads)
     {
         int index = (int)requestType;
         if (threads[index] != null)
         {
             threads[index].Abort();
             threads[index] = null;
         }
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Array element access operator
 /// </summary>
 /// <param name="requestType">Request type</param>
 /// <returns>Request required</returns>
 public bool this[ERequestResponseType requestType]
 {
     get
     {
         return(values[(int)requestType]);
     }
     set
     {
         if (available[(int)requestType])
         {
             values[(int)requestType] = value;
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Send query
        /// </summary>
        /// <param name="requestType">Request type</param>
        /// <returns>Success</returns>
        private bool SendQuery(ERequestResponseType requestType)
        {
            bool ret = false;

            requestsRequired.SetLastRequestTime(requestType);
            try
            {
                EndPoint endpoint = new IPEndPoint(IPAddress, Port);
                using (MemoryStream stream = new MemoryStream())
                {
                    using (BinaryWriter writer = new BinaryWriter(stream))
                    {
                        char op_code = RequestsRequired.GetOpCode(requestType);
                        writer.Write("SAMP".ToCharArray());
                        writer.Write(ipv4AddressUInt);
                        writer.Write(port);
                        writer.Write(op_code);
                        if (op_code == 'p')
                        {
                            Random r = new Random();
                            r.NextBytes(randomNumbers);
                            writer.Write(randomNumbers);
                        }
                        timestamp[0] = DateTime.Now;
                    }
                    if (socket.SendTo(stream.ToArray(), endpoint) > 0)
                    {
                        ret = true;
                        Receive();
                    }
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
            }
            return(ret);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Fetch data asynchronous
 /// </summary>
 /// <param name="requestType">Request type</param>
 public void FetchDataAsync(ERequestResponseType requestType)
 {
     AbortThread(requestType);
     requestsRequired[requestType] = true;
     SendQueryAsync(requestType);
 }
Exemplo n.º 7
0
 /// <summary>
 /// Is data fetched
 /// </summary>
 /// <param name="requestType">Request type</param>
 /// <returns>Data fetched</returns>
 public bool IsDataFetched(ERequestResponseType requestType)
 {
     return(!(requestsRequired[requestType]));
 }
Exemplo n.º 8
0
 /// <summary>
 /// Get last request time
 /// </summary>
 /// <param name="requestType">Request type</param>
 /// <returns>Last request time</returns>
 public DateTime GetLastRequestTime(ERequestResponseType requestType)
 {
     return(lastRequestTime[(int)requestType]);
 }
Exemplo n.º 9
0
 /// <summary>
 /// Get operation code
 /// </summary>
 /// <param name="requestType">Request type</param>
 /// <returns>Operation code</returns>
 public static char GetOpCode(ERequestResponseType requestType)
 {
     return(opCodes[(int)requestType]);
 }
Exemplo n.º 10
0
 /// <summary>
 /// Lock
 /// </summary>
 /// <param name="requestType">Request type</param>
 public void Lock(ERequestResponseType requestType)
 {
     available[(int)requestType] = false;
     values[(int)requestType]    = false;
 }
Exemplo n.º 11
0
 /// <summary>
 /// Set last request time
 /// </summary>
 /// <param name="requestType">Request type</param>
 public void SetLastRequestTime(ERequestResponseType requestType)
 {
     lastRequestTime[(int)requestType] = DateTime.Now;
 }