public override void ReportNotSuitableSocketInfo(ClientRequestPacket crp, SocketInfo failedSocketInfo) { rwl.EnterWriteLock(); { //change immediately if (failedSocketInfo.Ips == currentProxyIPAddress) { ProxyInfo newProxy = proxyManager.DequeueFastestProxy(true); ChangeProxy(newProxy, ProxyChangePolicy.DELETE); } } rwl.ExitWriteLock(); }
public override void ReportErrorSocketInfo(ClientRequestPacket crp, SocketInfo failedSocketInfo) { rwl.EnterWriteLock(); { errorTimes++; if (errorTimes >= MAX_ERROR_TIMES && failedSocketInfo.Ips == currentProxyIPAddress) { ProxyInfo newProxy = proxyManager.DequeueFastestProxy(true); ChangeProxy(newProxy, ProxyChangePolicy.TO_PENDING); } } rwl.ExitWriteLock(); }
static ClientRequestPacket GetRequestPacketFromBytes(byte[] buffer) { ClientRequestPacket packet = new ClientRequestPacket(); int size = Marshal.SizeOf(packet); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(buffer, 0, ptr, size); packet = (ClientRequestPacket)Marshal.PtrToStructure(ptr, packet.GetType()); Marshal.FreeHGlobal(ptr); return(packet); }
public override SocketInfo RequireSocketInfo(ClientRequestPacket crp) { SocketInfo si = new SocketInfo(); si.Ips = dnsCache.GetIPAddress(crp.Host); if (si.Ips == null) { return(null); } si.Direct = true; si.InUse = true; si.Port = crp.Port; si.ReUse = false; return(si); }
public static void RequestHandler(int bytesRead, StateObject state, Socket handler) { int RequestSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(ClientRequestPacket)); int BombRequestSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(ClientBombChangePacket)); if (bytesRead == RequestSize) { ClientRequestPacket dataReceived = GetRequestPacketFromBytes(state.buffer); if (!CheckPlayerLogged(dataReceived.ID)) { return; } ClientRequest request = (ClientRequest)dataReceived.request; if (request == ClientRequest.Request_GetPlayersInfo) { GetPlayersInfoHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_DisconnectPlayer) { LogOutHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_StartBattleScene) { StartBattleSceneHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_PlayerReady) { StartBattleHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_TimeOver) { TimeOverHandler(handler, dataReceived.ID); } } else if (bytesRead == BombRequestSize) { ClientBombChangePacket dataReceived = GetBombRequestPacketFromBytes(state.buffer); ChangePlayerBombHandler(handler, dataReceived); } else { ServerMessagePacket packet; packet.msg = (uint)ServerMessage.Server_Denied; SendTCP(handler, GetBytesFromPacket(packet)); } }
public override SocketInfo RequireSocketInfo(ClientRequestPacket crp) { var si = new SocketInfo(); if (pacSetting.IsThroughProxy(crp.Protocol, crp.Host, crp.Port, crp.RelativePath)) { rwl.EnterUpgradeableReadLock(); si.Ips = currentProxyIPAddress; si.Port = currentProxyPort; if (si.Ips == null) { ProxyInfo newProxy = proxyManager.DequeueFastestProxy(true); ChangeProxy(newProxy, ProxyChangePolicy.DELETE); } si.Ips = currentProxyIPAddress; si.Port = currentProxyPort; rwl.ExitUpgradeableReadLock(); //through proxy if (si.Ips == null) { return(null); } si.Direct = false; si.InUse = true; } else { //direct si.Ips = dnsCache.GetIPAddress(crp.Host); if (si.Ips == null) { return(null); } si.Direct = true; si.InUse = true; si.Port = crp.Port; si.ReUse = false; } return(si); }
public override void ReportNotSuitableSocketInfo(ClientRequestPacket crp, SocketInfo failedSocketInfo) { //I have nothing to do }
public abstract void ReportNotSuitableSocketInfo(ClientRequestPacket crp, SocketInfo failedSocketInfo);
public abstract void ReportErrorSocketInfo(ClientRequestPacket crp, SocketInfo failedSocketInfo);
public abstract SocketInfo RequireSocketInfo(ClientRequestPacket crp);
void OnClientRequest(ClientRequestPacket packet, NetPeer peer) { stateManager.AddRequest(packet.ClientID, packet.Request); }