/// <summary>
        /// Host receives synchronization request
        /// </summary>
        /// <param name="timestamp"></param>
        /// <param name="id"></param>
        /// <param name="ipAndPort">Ip and port of host who calls this method</param>
        public void GetSyncRequest_RA(string timestamp, string id, string ipAndPort)
        {
            LogHelper.WriteStatus("SERVER: RECV " + _module.LocalNodeInfo.GetIpAndPort() + " FROM: " + ipAndPort + " TIME: " + timestamp);
            // create request object
            var request = new DataRequest()
            {
                Time      = int.Parse(timestamp),
                Id        = _module.LocalId,
                CallerId  = long.Parse(id),
                IpAndPort = ipAndPort
            };

            if (_module.State != AccessState.Held && !_module.IsInterested)
            {
                //Send accept msg to callee
                SendAcceptResponse(ipAndPort);
            }
            else if (_module.State == AccessState.Held)
            {
                _module.AddRequest(request);
            }
            else if (_module.IsInterested)
            {
                if (_module.Clock.CompareTime(int.Parse(timestamp), long.Parse(id)))
                {   // request timestamp is smaller than this node's timestamp.
                    //Send accept msg to callee
                    SendAcceptResponse(ipAndPort);
                }
                else
                {
                    _module.AddRequest(request);
                }
            }
            _module.Clock.ReceiveEventHandle(int.Parse(timestamp));
        }