예제 #1
0
    //主动发送
    public static bool SocketSend(int id, Package pkg)
    {
        if (socketPool.ContainsKey(id))
        {
            try
            {
                BaseSocket s = socketPool[id];
                if (s.GetSocketId() != IpManager.ListenSocketId)
                {
                    var sendBytes = PackageHelper.GetNetworkSendBuffer(pkg);
                    if (s.SocketSend(sendBytes, 0, sendBytes.Length) != SOCKET_CODE.SUCCESS)
                    {
                        socketPool[id].SocketClose();
                        socketPool.Remove(id);
                    }
                    return(true);
                }
            }
            catch
            {
                socketPool[id].SocketClose();
                socketPool.Remove(id);
            }
        }

        return(false);
    }
예제 #2
0
    public static int OnRecv(byte[] buffer, int length, BaseSocket socket)
    {
        int ret = 0;

        byte commandType=0;

        BASESOCKET_TYPE socketType = socket.SocketType();
                
        switch (socketType)
        {
            case BASESOCKET_TYPE.SOCKET_TCP:               
                {                    
                    ret = CheckPackageLength(buffer, length, out commandType);
                    ////TraceUtil.Log("ServiceManager OnRecv length:" + length + "ret " + ret);
                    if (ret > length)
                    {
                        return ret;
                    }
                }
                break;

            case BASESOCKET_TYPE.SOCKET_UDP:
                ret = length;
                break;

            default:
                break;
        }

        if (ServiceMap.ContainsKey(commandType))
        {
            //TraceUtil.Log("Data Length:" + length + "  CheckLength:" + ret + " BuffLength:" + buffer.Length);
            //TraceUtil.Log("ReceiveTCP:" + commandType + "," + (byte)MasterMsgType.NET_ROOT_TRADE);
            ServiceMap[commandType].SaveResponseHandleToInvoke(buffer.Take(ret).ToArray(), socket.GetSocketId(), commandType);
        }
        else
        {
            //TraceUtil.Log("Data Length:" + length + "  CheckLength:" + ret + " BuffLength:" + buffer.Length);
        }

        return ret;
    }
예제 #3
0
    public static void OnRecvUDP(byte[] recvBuffer, int length, BaseSocket socket)
    {
        //MultiGameView.Log("Recieve collect Player Request ServiceManager:");
        byte commandType;
        //CommonTrace.Log(string.Format("收到UDP:数据类型{0}", packageType)); 
        var binaryHead = PackageHelper.BytesToStuct<PkgHead>(recvBuffer);

        commandType = binaryHead.MasterMsgType;

        int ret = binaryHead.DataLength;

        if (ServiceMap.ContainsKey(commandType))
        {
            ServiceMap[commandType].SaveResponseHandleToInvoke(recvBuffer.Take(ret).ToArray(), socket.GetSocketId(), commandType);
        }
    }