public byte ReadHeader(ITransport trans, HeaderParams param, OperationsFactory opFac, HotRodOperation op) { byte magic = trans.ReadByte(); //Reads magic byte: indicates whether the header is a request or a response if (magic != HotRodConstants.RESPONSE_MAGIC) { String message = "Invalid magic number! Expected " + HotRodConstants.RESPONSE_MAGIC + "received " + magic; InvalidResponseException e = new InvalidResponseException(message); logger.Warn(e); throw e; } long receivedMessageId = trans.ReadVLong(); //Reads the message ID. Should be similar to the msg ID of the request if (receivedMessageId != param.Messageid && receivedMessageId != 0) { String message = "Invalid Message ID! Expected " + param.Messageid + "received " + receivedMessageId; InvalidResponseException e = new InvalidResponseException(message); logger.Warn(e); throw new InvalidResponseException(message); } byte receivedOpCode = trans.ReadByte(); //Reads the OP Code logger.Trace(String.Format("response code recieved = " + receivedOpCode)); if (receivedOpCode != param.OpRespCode) //Checks whether the recieved OP code is the corrsponding OPCode for the request sent { if (receivedOpCode == HotRodConstants.ERROR_RESPONSE) //In case of any error indication by the server { logger.Warn(String.Format("Error Response Recieved : " + receivedOpCode)); throw new InvalidResponseException("Error Response Recieved"); } logger.Warn(String.Format("Invalid Response Recieved : Expected " + param.OpRespCode + " Recieved " + receivedOpCode)); throw new InvalidResponseException("Invalid Response Operation."); } byte status = trans.ReadByte(); //Reads the status logger.Trace(String.Format("Status : " + status)); byte topchange = trans.ReadByte(); //Reads the Topology change byte. Equals 0 for No Change in topology logger.Trace(String.Format("Topology change indicator value : " + topchange)); int newTopology = param.Topologyid; if (topchange == 1) ReadNewTopologyAndHash(trans, param, opFac, op); return status; }
public void ReadNewTopologyAndHash(ITransport transport, HeaderParams param, OperationsFactory opFac, HotRodOperation op) { int newTopologyId = transport.ReadVInt(); cacheManager.SetTopologyId(newTopologyId); int numOfServers = transport.ReadVInt(); if (logger.IsTraceEnabled) { logger.Trace("Topology change request: newTopologyId= " + newTopologyId + " numOfServers= " + numOfServers); } List<Tuple<string, int>> newServerList = new List<Tuple<string, int>>(); for (int i = 0; i < numOfServers; i++) { string host = transport.ReadString(); //int hostIPLength will be read inside the ReadString Method. int port = transport.ReadUnsignedShort(); if (logger.IsTraceEnabled) { logger.Trace("Server read : " + host + ":" + port); } Tuple<string, int> newServer = new Tuple<string, int>(host, port); newServerList.Add(newServer); } transport.GetTransportFactory().UpdateServers(newServerList); }
public PingOperation(Codec codec, int topologyId, ITransport trans, OperationsFactory opFac) : this(codec, trans, HotRodConstants.DEFAULT_CACHE_NAME_BYTES) { }