public override int determineServer(IInputStreamReadWriter client) { if(Count == 0) { return 0; } return getKeyFromIndex(hop = ++hop % Count); }
public override int determineServer(IInputStreamReadWriter client, out IInputStreamReadWriter proxy) { proxy = client; return determineServer(client); }
public override int determineServer(IInputStreamReadWriter client) { string ip = ((IPEndPoint)client.RemoteEndPoint).Address.ToString(); return getKeyFromIndex(Math.Abs(ip.GetHashCode()) % Count); }
public abstract int determineServer(IInputStreamReadWriter client);
public abstract int determineServer(IInputStreamReadWriter client, out IInputStreamReadWriter proxy);
public override int determineServer(IInputStreamReadWriter client, out IInputStreamReadWriter proxy) { proxy = new MockInputStreamReadWriter(client.getSocket()); byte[] ba = new byte[BUFFER_SIZE]; int length; string content = ""; while (true) { length = client.Receive(ba); if(length == 0) { break; } proxy.Feed(ba, length); content += ASCIIEncoding.ASCII.GetString(ba, 0, length); if (length < ba.Length) break; } if(content.Equals("")) { return 0; } String header = content.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.RemoveEmptyEntries).First(); String[] headers = header.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); String cookies = null; foreach(string headerLine in headers) { if(headerLine.StartsWith("Cookie")) { cookies = headerLine.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1]; } } if(cookies != null) { String sessionID = getSessionID(cookies); if(sessionID == null) { Console.WriteLine("No session found - doing backup strategy."); return backup.determineServer(proxy); } else { Console.WriteLine("Found session with id {0}", sessionID); } if (!sessionMap.ContainsKey(sessionID)) { Console.WriteLine("Session not (yet) in cache - falling back to backup."); InsertSession(sessionID, backup.determineServer(proxy)); } int serverNumber = sessionMap[sessionID]; if(!Exists(serverNumber)) { Console.WriteLine("Server does not exist (anymore)! Session:{0} serverNum:{1}", sessionID, serverNumber); serverNumber = backup.determineServer(proxy); InsertSession(sessionID, serverNumber); } return serverNumber; } else { return backup.determineServer(proxy); } }
public override int determineServer(IInputStreamReadWriter client) { throw new NotImplementedException(); }