예제 #1
0
        /// <summary>
        /// 接收指定客户端Socket的消息
        /// </summary>
        /// <param name="clientSocket"></param>
        private static void RecieveMessage(object clientSocket)
        {
            Socket mClientSocket = (Socket)clientSocket;

            while (true)
            {
                try
                {
                    int receiveNumber = mClientSocket.Receive(result);
                    Console.WriteLine("接收客户端{0}消息, 长度为{1}", mClientSocket.RemoteEndPoint.ToString(), receiveNumber);
                    ByteBuffer buff       = new ByteBuffer(result);
                    int        datalength = buff.ReadShort();
                    int        typeId     = buff.ReadInt();
                    byte[]     pbdata     = buff.ReadBytes();
                    //通过协议号判断选择的解析类
                    if (typeId == (int)EnmCmdID.CS_LOGIN_REQ)
                    {
                        CSLoginReq clientReq = PackCodec.Deserialize <CSLoginReq>(pbdata);
                        string     user_name = clientReq.LoginInfo.UserName;
                        string     pass_word = clientReq.LoginInfo.Password;
                        Console.WriteLine("数据内容:UserName={0},Password={1}", user_name, pass_word);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    mClientSocket.Shutdown(SocketShutdown.Both);
                    mClientSocket.Close();
                    break;
                }
            }
        }
예제 #2
0
    static void Single_OnLoginReq(object obj, Action <object> callback)
    {
        CSLoginReq req = obj as CSLoginReq;

        Vector3 pos = NBTHelper.GetPlayerPos();
        Vector3 rot = NBTHelper.GetPlayerRot();

        CSLoginRes rsp = new CSLoginRes()
        {
            RetCode    = 0,
            PlayerData = new CSPlayer
            {
                PlayerID    = 0,
                Name        = "Steve",
                Position    = pos.ToCSVector3(),
                Rotation    = rot.ToCSVector3(),
                SelectIndex = playerData.SelectIndex,
            }
        };

        for (int i = 0; i < 18; i++)
        {
            rsp.PlayerData.BagItems.Add(new CSItem {
                Type  = playerData.BagItems[i].type,
                Count = playerData.BagItems[i].count
            });
        }

        for (int i = 0; i < 9; i++)
        {
            rsp.PlayerData.SelectItems.Add(new CSItem
            {
                Type  = playerData.SelectItems[i].type,
                Count = playerData.SelectItems[i].count
            });
        }

        foreach (KeyValuePair <Vector3Int, Vector3Int> kvPair in dependenceDict)
        {
            rsp.BlockAttrs.Add(new CSBlockAttrs {
                pos       = kvPair.Key.ToCSVector3Int(),
                depentPos = kvPair.Value.ToCSVector3Int(),
            });
        }

        foreach (KeyValuePair <Vector3Int, CSBlockOrientation> kvPair in orientationDict)
        {
            rsp.BlockAttrs.Add(new CSBlockAttrs
            {
                pos    = kvPair.Key.ToCSVector3Int(),
                orient = kvPair.Value,
            });
        }

        callback(rsp);
    }
예제 #3
0
    public static void LoginReq(string account, string password)
    {
        CSLoginReq req = new CSLoginReq
        {
            Account  = account,
            Password = password,
        };

        NetworkManager.SendPkgToServer(ENUM_CMD.CS_LOGIN_REQ, req, OnLoginRes);
    }
예제 #4
0
        //登陆
        public void Login(string account, string pass)
        {
            CSLoginReq req = new CSLoginReq();

            req.AccountName  = account;
            req.Passwd       = pass;
            req.PlatformId   = (uint)EPlatformId.Official;
            LoginAccountName = account;
            LoginPassword    = pass;
            NetworkManager.Instance.SendMsg(req, (int)MessageId.LoginCsLoginReq);
            Debug.Log("login~~~~~~");
        }
예제 #5
0
    // Use this for initialization
    void Start()
    {
        CSLoginInfo mLoginInfo = new CSLoginInfo();

        mLoginInfo.UserName = "******";
        mLoginInfo.Password = "******";
        CSLoginReq mReq = new CSLoginReq();

        mReq.LoginInfo = mLoginInfo;

        byte[]       data    = CreateData((int)EnmCmdID.CS_LOGIN_REQ, mReq);
        ClientSocket mSocket = new ClientSocket();

        mSocket.ConnectServer("127.0.0.1", 8088);
        mSocket.SendMessage(data);
    }
예제 #6
0
    // Use this for initialization
    void Start()
    {
        // ObjectToFile();
        // FileToObject();

        CSLoginInfo mLoginInfo = new CSLoginInfo();

        mLoginInfo.UserName = "******";
        mLoginInfo.Password = "******";
        CSLoginReq mReq = new CSLoginReq();

        mReq.LoginInfo = mLoginInfo;

        byte[]     result = PackCodec.Serialize(mReq);
        CSLoginReq req    = PackCodec.Deserialize <CSLoginReq>(result);

        Debug.Log("username="******";password=" + req.LoginInfo.Password);
    }
예제 #7
0
        public static void OnLoginReq(Player player, MemoryStream stream)
        {
            CSLoginReq req = NetworkManager.Deserialize <CSLoginReq>(stream);

            Ultilities.Print($"CSLoginReq,account={req.Account}");

            //检测是否已注册
            bool bAccountExist = Redis.GetAccountData(req.Account, out AccountData accountData);

            //Ultilities.Print($"bAccountExist={bAccountExist}");
            if (!bAccountExist)
            {
                CSLoginRes res = new CSLoginRes {
                    RetCode = 6
                };
                NetworkManager.Enqueue(player.socket, ENUM_CMD.CS_LOGIN_RES, res);
            }
            else
            {
                //检测是否已登录,防止顶号
                bool hasLoggedIn = players.ContainsKey(accountData.playerID);
                //Ultilities.Print($"hasLoggedIn={hasLoggedIn}");
                if (hasLoggedIn)
                {
                    CSLoginRes res = new CSLoginRes {
                        RetCode = 5
                    };
                    NetworkManager.Enqueue(player.socket, ENUM_CMD.CS_LOGIN_RES, res);
                }
                else
                {
                    //检查密码是否正确
                    bool bCorrect = req.Password.Equals(accountData.password);
                    //Ultilities.Print($"req.Password={req.Password},accountData.password={accountData.password},bCorrect={bCorrect}");
                    if (!bCorrect)
                    {
                        CSLoginRes res = new CSLoginRes {
                            RetCode = 7
                        };
                        NetworkManager.Enqueue(player.socket, ENUM_CMD.CS_LOGIN_RES, res);
                    }
                    else
                    {
                        bool hasData = Redis.GetPlayerData(accountData.playerID, out CSPlayer playerData);
                        //Ultilities.Print($"hasData={hasData}");
                        if (!hasData)
                        {
                            //如果是第一次登陆,则写数据库
                            playerData = new CSPlayer
                            {
                                PlayerID = accountData.playerID,
                                Name     = accountData.name,
                                Position = new CSVector3 {
                                    x = 0, y = 30, z = 0
                                },
                                Rotation = new CSVector3 {
                                    x = 0, y = 0, z = 0
                                }
                            };
                            Redis.SetPlayerData(playerData.PlayerID, playerData);
                        }

                        AddPlayer(player, playerData);
                        //Ultilities.Print($"playerData,playerID={accountData.playerID},account={accountData.account},password={accountData.password},name={accountData.name}");
                        //Ultilities.Print($"player,id={player.id},name={player.name}");

                        CSLoginRes res = new CSLoginRes
                        {
                            RetCode    = 0,
                            PlayerData = playerData
                        };
                        NetworkManager.Enqueue(player.socket, ENUM_CMD.CS_LOGIN_RES, res);

                        MessageNotify("system", "player " + player.name + " has logged in, current number of player : " + players.Count);
                    }
                }
            }
        }
    private void TcpServerMsgCallback(byte[] data)
    {
        Debug.Log("收到消息回复 TcpServerMsgCallback");
        ThreadCrossHelper.Instance.ExcutionFunc(() => {
            string msg = null;
            if (IsOpenNewMethod)
            {
                UserData user = PackCodec.Deserialize <UserData>(data);
                BinaryFormatter bFormatter = new BinaryFormatter();
                using (MemoryStream s = new MemoryStream())
                {
                    byte[] bdata = user.data;
                    s.Write(bdata, 0, bdata.Length);
                    s.Position = 0;
                    Test t     = (Test)bFormatter.Deserialize(s);
                    msg        = string.Format("user2-> id:{0}, name:{1}, level:{2}, data:{3}", user.id, user.name, user.level, t.msg);
                }
            }
            else
            {
                CSLoginInfo mLoginInfo = PackCodec.Deserialize <CSLoginInfo>(data);
                msg = "UserName = "******", Password = "******"I get message";
            UserData user1 = new UserData();
            user1.id    = 1;
            user1.name  = "User1";
            user1.level = 10;
            BinaryFormatter bFormatter = new BinaryFormatter();
            using (MemoryStream byteData = new MemoryStream())
            {
                bFormatter.Serialize(byteData, test);
                byte[] value = byteData.GetBuffer();
                user1.data = value;
            }
            //user1.data = Encoding.UTF8.GetBytes("I get your message");
            //序列化
            using (MemoryStream ms = new MemoryStream())
            {
                Serializer.Serialize <UserData>(ms, user1);
                ms.Position = 0;
                int length = (int)ms.Length;
                buff = ms.ToArray();
            }
        }
        else
        {
            CSLoginInfo Info = new CSLoginInfo();
            Info.UserName = "******";
            Info.Password = "******";
            CSLoginReq mReq = new CSLoginReq();
            mReq.LoginInfo = Info;
            buff           = PackCodec.Serialize(mReq);
        }

        TcpSocketMgr.GetInstance().GetSendAssist().SendMsg(buff);
    }
    private void SendMsgOnClick()
    {
        if (!IsClient)
        {
            byte[] buff = null;
            if (IsOpenNewMethod)
            {
                Test test = new Test();
                test.msg = "It's a Server bytes array";

                UserData user1 = new UserData();
                user1.id    = 1;
                user1.name  = "User1";
                user1.level = 10;
                BinaryFormatter bFormatter = new BinaryFormatter();
                using (MemoryStream byteData = new MemoryStream())
                {
                    bFormatter.Serialize(byteData, test);
                    byte[] value = byteData.GetBuffer();
                    user1.data = value;
                }
                //user1.data = Encoding.UTF8.GetBytes("It's a Server bytes array");

                //序列化
                using (MemoryStream ms = new MemoryStream())
                {
                    Serializer.Serialize <UserData>(ms, user1);
                    ms.Position = 0;
                    int length = (int)ms.Length;
                    buff = new byte[length];
                    ms.Read(buff, 0, length);
                }
            }
            else
            {
                CSLoginInfo Info = new CSLoginInfo();
                Info.UserName = "******";
                Info.Password = "******";
                CSLoginReq mReq = new CSLoginReq();
                mReq.LoginInfo = Info;
                buff           = PackCodec.Serialize(mReq);
            }
            TcpSocketMgr.GetInstance().GetSendAssist().SendMsg(buff);
        }
        else
        {
            byte[] buff = null;
            if (IsOpenNewMethod)
            {
                Test test = new Test();
                //test.msg = "It's a Client bytes array";
                test.msg = "It's a Client bytes array";
                UserData user1 = new UserData();
                user1.id    = 1;
                user1.name  = "User1";
                user1.level = 10;
                //user1.data = Encoding.UTF8.GetBytes("It's a Client bytes array");
                byte[] stringData = Encoding.UTF8.GetBytes("It's a Client bytes array");
                Debug.Log("byte string length:" + stringData.Length);
                BinaryFormatter bFormatter = new BinaryFormatter();
                using (MemoryStream byteData = new MemoryStream())
                {
                    Serializer.Serialize <Test>(byteData, test);
                    user1.data = byteData.ToArray();
                    Debug.Log("data length:" + user1.data.Length);
                }
                //序列化
                using (MemoryStream ms = new MemoryStream())
                {
                    Serializer.Serialize <UserData>(ms, user1);
                    ms.Position = 0;
                    int length = (int)ms.Length;
                    buff = ms.ToArray();
                }
            }
            else
            {
                CSLoginInfo Info = new CSLoginInfo();
                Info.UserName = "******";
                Info.Password = "******";
                CSLoginReq mReq = new CSLoginReq();
                mReq.LoginInfo = Info;
                buff           = PackCodec.Serialize(mReq);
            }
            TcpSocketClientMgr.GetInstance().GetSendAssist().SendMsg(buff);
        }
    }