Exemple #1
0
 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();
 }
Exemple #2
0
 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();
 }
Exemple #3
0
    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);
    }
Exemple #4
0
        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);
        }
Exemple #5
0
    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));
        }
    }
Exemple #6
0
        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);
        }
Exemple #7
0
 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);
Exemple #10
0
 public abstract SocketInfo RequireSocketInfo(ClientRequestPacket crp);
 void OnClientRequest(ClientRequestPacket packet, NetPeer peer)
 {
     stateManager.AddRequest(packet.ClientID, packet.Request);
 }