Exemplo n.º 1
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (ServerTimestamp != 0)
            {
                hash ^= ServerTimestamp.GetHashCode();
            }
            if (ClientIp != 0)
            {
                hash ^= ClientIp.GetHashCode();
            }
            if (RedirectIp != 0)
            {
                hash ^= RedirectIp.GetHashCode();
            }
            if (RedirectPort != 0)
            {
                hash ^= RedirectPort.GetHashCode();
            }
            if (ClientIpV6.Length != 0)
            {
                hash ^= ClientIpV6.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Exemplo n.º 2
0
        private MiHomeResponse Send(MiHomeRequest request)
        {
            if (!request.IsHandshake)
            {
                Connect();
                NextId();

                // Update the request with the updated values from the handshake
                request.UpdateDeviceId(_deviceId);
                request.UpdateTimestamp(_serverTimestamp);
                request.RequestId = _requestId;
            }

            int retryCount = request.NetworkOptions.RetryCount;

            do
            {
                var requestPayload  = request.GetBytes();
                var responsePayload = _socket.Send(requestPayload, request.NetworkOptions);
                if (responsePayload != null)
                {
                    var miResponse = new MiHomeResponse(_miToken, responsePayload);
                    if (miResponse.Success)
                    {
                        // We need Device ID and server timestamp for subsequent requests
                        _serverTimestamp = miResponse.Timestamp;
                        if (_deviceId == null && miResponse.DeviceId != null)
                        {
                            _deviceId = miResponse.DeviceId;
                        }
                        return(miResponse);
                    }
                }
                request.RequestId++;
                retryCount--;
            } while (retryCount > 0);

            return(new MiHomeResponse());
        }