using Shadowsocks.Model; using System; using System.Collections.Generic; using System.Net; using System.Text; namespace Shadowsocks.Controller.Strategy { public enum IStrategyCallerType { TCP, UDP } /* * IStrategy * * Subclasses must be thread-safe */ public interface IStrategy { string Name { get; } string ID { get; } /* * Called when servers need to be reloaded, i.e. new configuration saved */ void ReloadServers(); /* * Get a new server to use in TCPRelay or UDPRelay */ Server GetAServer(IStrategyCallerType type, IPEndPoint localIPEndPoint, EndPoint destEndPoint); /* * TCPRelay will call this when latency of a server detected */ void UpdateLatency(Server server, TimeSpan latency); /* * TCPRelay will call this when reading from a server */ void UpdateLastRead(Server server); /* * TCPRelay will call this when writing to a server */ void UpdateLastWrite(Server server); /* * TCPRelay will call this when fatal failure detected */ void SetFailure(Server server); } }