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);
        }
Example #3
0
        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();
 }