//发送
    public static void Send(ClientState cs, MsgBase msg)
    {
        //状态判断
        if (cs == null)
        {
            return;
        }
        if (!cs.socket.Connected)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //为简化代码,不设置回调
        try{
            cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
        }catch (SocketException ex) {
            Console.WriteLine("Socket Close on BeginSend" + ex.ToString());
        }
    }
Beispiel #2
0
    public static void Send(ClientState state, MsgBase msg)
    {
        if (state == null || !state.socket.Connected)
        {
            return;
        }

        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    length    = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[length + 2];
        sendBytes[0] = (byte)(length % 256);
        sendBytes[1] = (byte)(length / 256);

        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);

        try
        {
            Console.WriteLine("Send { " + msg.msgName + " } to " + state.socket.RemoteEndPoint);
            state.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
        }
        catch (SocketException ex)
        {
            Console.WriteLine("Socket send message error " + ex.ToString());
        }
    }
Beispiel #3
0
    //发送
    public static void Send(ClientState cs, MsgBase msg)
    {
        //状态判断
        if (cs == null)
        {
            return;
        }
        if (!cs.socket.Connected)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //为简化代码,调用同步方法
        cs.socket.Send(sendBytes);
    }
Beispiel #4
0
        public static void Send(ClientState cs, MsgBase msg)
        {
            if (cs == null)
            {
                return;
            }
            if (!cs.socket.Connected)
            {
                return;
            }
            byte[] nameBytes = MsgBase.EncodeName(msg);
            byte[] bodyBytes = MsgBase.Encode(msg);
            int    len       = nameBytes.Length + bodyBytes.Length;

            byte[] sendBytes = new Byte[2 + len];
            sendBytes[0] = (byte)(len % 256);
            sendBytes[1] = (byte)(len / 256);

            Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
            Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
            try
            {
                cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
            }
            catch (SocketException ex)
            {
                Debug.WriteLine("Socket Close on BeginSend {0}", ex.ToString());
                throw;
            }
        }
Beispiel #5
0
        public static void Send(ClientState state, MsgBase msgBase)
        {
            if (!state.socket.Connected || state == null)
            {
                return;
            }

            byte[] nameBytes = MsgBase.EncodeName(msgBase);

            byte[] bodyBytes = MsgBase.Encode(msgBase);

            Int16 len = (Int16)(nameBytes.Length + bodyBytes.Length);

            byte[] readBuff = new byte[len + 2];

            readBuff[0] = (byte)(len % 256);

            readBuff[1] = (byte)(len / 256);

            Array.Copy(nameBytes, 0, readBuff, 2, nameBytes.Length);

            Array.Copy(bodyBytes, 0, readBuff, 2 + nameBytes.Length, bodyBytes.Length);

            ByteArray array = new ByteArray(readBuff);

            try
            {
                state.socket.BeginSend(array.bytes, array.readIndex, array.length, 0, SendCallBack, state);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Socket Close On BeginSend " + ex.ToString());
            }
        }
Beispiel #6
0
        public static void Test()
        {
            MsgMove msgMove = new MsgMove();

            msgMove.x = 45;

            byte[] bytes = MsgBase.Encode(msgMove);

            Console.WriteLine(Encoding.UTF8.GetString(bytes));

            MsgMove msg = (MsgMove)MsgBase.Decode("MsgMove", bytes, 0, bytes.Length);

            Console.WriteLine(msg.x);

            if (DbManager.CreatePlayer("zjt"))
            {
                Console.WriteLine("成功创建");
            }

            if (DbManager.Register("wyl", "123456"))
            {
                Console.WriteLine("成功注册");
            }

            PlayerData playerData = DbManager.GetPlayerData("zjt");

            if (playerData != null)
            {
                Console.WriteLine("玩家的金币是:{0}", playerData.coin);
            }
        }
Beispiel #7
0
    //发送数据
    public static void Send(MsgBase msg)
    {
        //状态判断
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        // byte[] sendBytes = new byte[INT32+len+1];
        // sendBytes[INT32+len] = System.Text.Encoding.UTF8.GetBytes("\n")[0];
        byte[] sendBytes = new byte[INT32 + len];
        byte[] lenBytes  = ArrayUtils.intToByteArray(len);
        for (int i = 0; i < INT32; i++)
        {
            sendBytes[i] = lenBytes[i];
        }
        //组装长度
        // sendBytes[0] = (byte)(len%256);
        // sendBytes[1] = (byte)(len/256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, INT32, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, INT32 + nameBytes.Length, bodyBytes.Length);
        // for(int i=0;i<sendBytes.Length;i++){
        //  Debug.Log(sendBytes[i]);
        // }
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;    //writeQueue的长度

        lock (writeQueue){
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }


        //send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length,
                             0, SendCallback, socket);
        }
    }
    // 发送数据
    public static void Send(MsgBase msg)
    {
        // 状态判断
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }

        // 数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);             // 协议名长度+协议名
        byte[] bodyBytes = MsgBase.Encode(msg);                 // 协议体
        int    len       = nameBytes.Length + bodyBytes.Length; // 总长度

        byte[] sendBytes = new byte[2 + len];

        // 组装总长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        // 组装协议名
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        // 组装协议体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);

        // 写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0; // writeQueue的长度

        lock (writeQueue)
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }

        // Send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }
Beispiel #9
0
    //发送数据
    public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);    //名字
        byte[] bodyBytes = MsgBase.Encode(msg);        //消息体
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;

        lock (writeQueue)        //lock  避免线程冲突
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }
        //send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }
Beispiel #10
0
    public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }


        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        ByteArray byteArray = new ByteArray(sendBytes);
        int       count     = 0;

        lock (writeQueue)
        {
            writeQueue.Enqueue(byteArray);
            count = writeQueue.Count;
        }
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
        socket.Send(sendBytes);
    }
    public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }

        byte[] nameBytes = MsgBase.EcodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(nameBytes)}");
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(bodyBytes)}");
        int len = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];//增加总消息长度
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(sendBytes)}");
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;

        lock (writeQueue)
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }