示例#1
0
    private Hashtable sendInternal(Hashtable data)
    {
        String requestId = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString();

        data["requestId"] = requestId;

        GSAutoResetEvent messageReceiveEvent = new GSAutoResetEvent(false);

        pendingRequests.Add(requestId, messageReceiveEvent);

        sendNoWait(data);

        if (!messageReceiveEvent.WaitOne(5000))
        {
            Hashtable errors = new Hashtable();
            errors.Add("timeout", "No response within 5 secs");
            Debug.Log("No response within 5 secs");
            pendingRequests.Remove(requestId);
            Hashtable error = new Hashtable();
            error.Add("error", errors);
            return(error);
        }

        pendingRequests.Remove(requestId);
        return(messageReceiveEvent.response);
    }
示例#2
0
    private void completeResponse(Hashtable response)
    {
        String requestId = response ["requestId"].ToString();

        if (requestId != null)
        {
            if (pendingRequests.ContainsKey(requestId))
            {
                GSAutoResetEvent pending = pendingRequests[requestId];
                if (pending != null)
                {
                    pending.populateAndSet(response);
                }
            }
        }
    }