Ejemplo n.º 1
0
        static void QueryRoom(KcpUser linker, DataBuffer buffer)
        {
            var list = RoomManager.QueryFreeRoom();

            if (list.Count == 0)
            {
                ErrorCode.SendErrorCode(linker, ErrorCode.NoFreeRoom);
                return;
            }
            DataBuffer db   = new DataBuffer();
            FakeStruct fake = new FakeStruct(db, Req.Length);

            fake[Req.Cmd]  = QueryCmd.QueryRoom;
            fake[Req.Type] = MessageType.Query;
            db.fakeStruct  = fake;
            int             c     = list.Count;
            FakeStructArray array = new FakeStructArray(db, 3, c);

            for (int i = 0; i < c; i++)
            {
                var room = list[i];
                array[c, 0] = room.RoomId;
                array[c, 1] = room.Number;
                array.SetData(c, 2, room.Name);
            }
            fake.SetData(Req.Args, array);
            linker.Send(AES.Instance.Encrypt(db.ToBytes()), EnvelopeType.AesDataBuffer);
        }
Ejemplo n.º 2
0
        static void CreateRoom(KcpUser linker, DataBuffer buffer)
        {
            var user = linker.userInfo;

            if (user == null)
            {
                ErrorCode.SendErrorCode(linker, ErrorCode.NotLogin);
                return;
            }
            int rid  = user.RoomId;
            var room = RoomManager.QueryRoom(rid);

            if (room != null)
            {
                if (room.ExistUser(user.RoomId))
                {
                    ErrorCode.SendErrorCode(linker, ErrorCode.JoinRoom);
                    return;
                }
                else
                {
                    user.RoomId = 0;
                }
            }
            room = RoomManager.CreateRoom();
            if (room == null)
            {
                ErrorCode.SendErrorCode(linker, ErrorCode.ServerFull);
                return;
            }
            room.JoinRoom(linker);
        }
Ejemplo n.º 3
0
        public virtual void JoinRoom(KcpUser linker)
        {
            if (linker.userInfo == null)
            {
                return;
            }
            for (int i = 0; i < 3; i++)
            {
                var user = gamers[i].userInfo;
                if (user == null)
                {
                    user =
                        gamers[i].userInfo = linker.userInfo;
                    gamers[i].linker       = linker;
                    DataBuffer db   = new DataBuffer();
                    var        fake = new FakeStruct(db, Req.Length);
                    fake[Req.Cmd]  = RpcCmd.JoinRoom;
                    fake[Req.Type] = MessageType.Rpc;

                    FakeStruct gamerInfo = new FakeStruct(db, 3);
                    //gamerInfo[0] = i;//seat
                    //gamerInfo[1] = user.id;//uid
                    //gamerInfo[2] = RoomId;//roomid
                    fake.SetData(Req.Args, gamerInfo);
                    db.fakeStruct = fake;

                    Broadcast(db);
                    GetRoomDetail(linker);
                    user.RoomId = RoomId;
                    break;
                }
            }
        }
    public static void Dispatch(KcpUser linker, byte[] dat, byte tag)
    {
        switch (tag)
        {
        case EnvelopeType.AesDataBuffer:
            if (dat.Length > 2)
            {
                try
                {
                    dat = AES.Instance.Decrypt(dat);
                    int    len = dat.ReadInt32(0);
                    int    all = dat.ReadInt32(4);
                    byte[] buf = new byte[all];
                    int    o   = LZ4Codec.Decode32Unsafe(dat, 8, len, buf, 0, all);
                    dat = new byte[o];
                    for (int i = 0; i < o; i++)
                    {
                        dat[i] = buf[i];
                    }
                    DispatchDataBuffer(linker, dat);
                }
                catch
                {
                }
            }
            break;

        case EnvelopeType.DataBuffer:
            DispatchDataBuffer(linker, dat);
            break;
        }
    }
Ejemplo n.º 5
0
        public virtual void EixtRoom(KcpUser linker)
        {
            if (gamers == null)
            {
                return;
            }
            if (linker.userInfo == null)
            {
                return;
            }
            //if (RoomState >State_Unready)
            //    return;
            long uid = linker.userInfo.id;

            for (int i = 0; i < gamers.Length; i++)
            {
                var gamer = gamers[i].userInfo;
                if (gamer.id == uid)
                {
                    gamers[i].linker   = null;
                    gamers[i].userInfo = null;
                    Number--;
                    //Linker.SendEmptyDataBuffer(linker,RpcCmd.ExitRoom,MessageType.Rpc);
                }
            }
        }
Ejemplo n.º 6
0
        public static void Dispatch(KcpUser linker, DataBuffer data)
        {
            int cmd = data.fakeStruct[Req.Cmd];

            switch (cmd)
            {
            case DefCmd.Login:
                Login(linker, data);
                break;
            }
        }
Ejemplo n.º 7
0
        public static void SendErrorCode(KcpUser linker, Int32 error)
        {
            DataBuffer db   = new DataBuffer();
            var        fake = new FakeStruct(db, Req.Length);

            fake[Req.Cmd]   = RpcCmd.Login;
            fake[Req.Type]  = MessageType.Rpc;
            fake[Req.Error] = error;
            db.fakeStruct   = fake;
            linker.Send(AES.Instance.Encrypt(db.ToBytes()), EnvelopeType.AesDataBuffer);
        }
Ejemplo n.º 8
0
        public static void Dispatch(KcpUser linker, DataBuffer data)
        {
            int cmd = data.fakeStruct[Req.Cmd];

            switch (cmd)
            {
            case QueryCmd.QueryRoom:
                QueryRoom(linker, data);
                break;
            }
        }
Ejemplo n.º 9
0
        public static void Dispatch(KcpUser linker, byte[] dat, byte tag)
        {
            switch (tag)
            {
            case EnvelopeType.AesDataBuffer:
                DispatchDataBuffer(linker, AES.Instance.Decrypt(dat));
                break;

            case EnvelopeType.DataBuffer:
                DispatchDataBuffer(linker, dat);
                break;
            }
        }
Ejemplo n.º 10
0
 static void NewLink(KcpUser linker, DataBuffer data)
 {
     byte[] dat = data.fakeStruct.GetData <byte[]>(Req.Args);
     if (dat != null)
     {
         var link = KcpPack.UnPackMsg <LinkInfo>(dat);
         if (link != null)
         {
             new IPAddress(link.ip.ToBytes());
             IPEndPoint endPoint = new IPEndPoint(new IPAddress(link.ip.ToBytes()), link.port);
             KcpServer.Instance.Send(new byte[1], EnvelopeType.Mate, endPoint);
         }
     }
 }
Ejemplo n.º 11
0
        public static void Dispatch(KcpUser linker, DataBuffer data)
        {
            int cmd = data.fakeStruct[Req.Cmd];

            switch (cmd)
            {
            case RpcCmd.CreateRoom:
                CreateRoom(linker, data);
                break;

            case RpcCmd.ExitRoom:
                ExitRoom(linker, data);
                break;
            }
        }
    static void DispatchDataBuffer(KcpUser linker, byte[] dat)
    {
        var buffer = new DataBuffer(dat);
        var fake   = buffer.fakeStruct;

        if (fake != null)
        {
            switch (fake[Req.Type])
            {
            case MessageType.Pro:
                ProData(linker, buffer);
                break;
            }
        }
    }
    static void ProData(KcpUser linker, DataBuffer data)
    {
        switch (data.fakeStruct[Req.Cmd])
        {
        case ProCmd.Server:
            RedirectServer(linker, data);
            break;

        case ProCmd.ServerIp:
            GetServerIp(linker, data);
            break;

        case ProCmd.AllServer:
            GetAllServerIp(linker, data);
            break;
        }
    }
Ejemplo n.º 14
0
        static void ExitRoom(KcpUser linker, DataBuffer buffer)
        {
            var user = linker.userInfo;

            if (user == null)
            {
                ErrorCode.SendErrorCode(linker, ErrorCode.NotLogin);
                return;
            }
            int rid  = user.RoomId;
            var room = RoomManager.QueryRoom(rid);

            if (room != null)
            {
                room.EixtRoom(linker);
            }
        }
Ejemplo n.º 15
0
        public void Ready(KcpUser linker, Int32 value)
        {
            if (RoomState > State_Unready)
            {
                return;
            }
            long uid = linker.userInfo.id;

            for (int i = 0; i < 3; i++)
            {
                var user = gamers[i].userInfo;
                if (user != null)
                {
                    if (user.id == uid)
                    {
                        gamers[i].ready = value;
                        DataBuffer db = new DataBuffer();
                        //var fake = new FakeStruct(db,Req.Length+1);
                        //fake[Req.Cmd]=RpcCmd.GamerReady;
                        //fake[Req.Type] = MessageType.Rpc;
                        //fake[Req.Args] = uid;
                        //fake[Req.Length] = value;
                        //db.fakeStruct = fake;

                        Broadcast(db);
                        break;
                    }
                }
            }
            int s = 0;

            for (int i = 0; i < 3; i++)
            {
                if (gamers[i].ready > 0)
                {
                    s++;
                }
            }
            if (s == 3)
            {
                RoomState = State_Ready;
                Countdown = 3;
                NextStep  = StartCountdown;
            }
        }
 static void RedirectServer(KcpUser linker, DataBuffer data)
 {
     try
     {
         byte[] dat = data.fakeStruct.GetData <byte[]>(Req.Args);
         var    rs  = KcpPack.UnPackMsg <RServer>(dat);
         if (rs != null)
         {
             if (rs.key == key)
             {
                 ServerTable.AddServer(linker.ip, linker.port, rs.name);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.StackTrace);
     }
 }
Ejemplo n.º 17
0
        static void Login(KcpUser linker, DataBuffer buffer)
        {
            string args = buffer.fakeStruct.GetData <string>(Req.Args);

            if (args == null)
            {
                return;
            }
            var login = JSONParser.FromJson <Login>(args);

            switch (login.type)
            {
            case "Tourists":
                TouristsLogin(linker, login);
                break;

            case "Account":
                break;
            }
        }
Ejemplo n.º 18
0
        static void TouristsLogin(KcpUser user, Login login)
        {
            var query = SqlCmd.Query("userinfo", "deviceId", login.key, true);

            SqlClient.Instance.ExecuteReader(query, (o) => {
                if (o.Read())
                {
                    UserInfo info = new UserInfo();
                    SqlTable.ReadToObject(info, o);
                    o.Close();
                    info.LastLogin = DateTime.Now.Ticks;
                    user.userInfo  = info;
                    user.Login();
                }
                else
                {
                    UserInfo info  = new UserInfo();
                    info.coins     = 1000;
                    info.deviceId  = login.key;
                    info.LastLogin = DateTime.Now.Ticks;
                    var cmd        = SqlCmd.InsertNewRow(info, "userinfo");
                    user.userInfo  = info;
                    o.Close();
                    SqlClient.Instance.ExecuteCmd(cmd, () => {
                        var qid = SqlCmd.Query("userinfo", "deviceId", login.key, true, "id");
                        SqlClient.Instance.ExecuteReader(qid, (e) => {
                            e.Read();
                            try
                            {
                                long uid         = e.GetInt64(0);
                                user.userInfo.id = uid;
                                user.Login();
                            }
                            catch
                            {
                            }
                        });
                    });
                }
            });
        }
Ejemplo n.º 19
0
 static void GetAllServerIp(KcpUser linker, DataBuffer data)
 {
     //int index = data.fakeStruct[Req.Args];
     //var info = ServerTable.GetAllServer();
     //int c = info.Count;
     //if(c>0)
     //{
     //    DataBuffer db = new DataBuffer();
     //    FakeStruct fake = new FakeStruct(db, Req.Length);
     //    fake[Req.Cmd] = ProCmd.AllServer;
     //    fake[Req.Type] = MessageType.Pro;
     //    FakeStructArray array = new FakeStructArray(db, 3, c);
     //    for(int i=0;i<c;i++)
     //    {
     //        array[i, 0] = info[i].ip;
     //        array[i, 1] = info[i].port;
     //        array.SetData(i, 2, info[i].name);
     //    }
     //    fake.SetData(Req.Args, array);
     //    db.fakeStruct = fake;
     //    linker.Send(AES.Instance.Encrypt(db.ToBytes()), EnvelopeType.AesDataBuffer);
     //}
 }
Ejemplo n.º 20
0
        static void DispatchDataBuffer(KcpUser linker, byte[] dat)
        {
            var buffer = new DataBuffer(dat);
            var fake   = buffer.fakeStruct;

            if (fake != null)
            {
                switch (fake[Req.Type])
                {
                case MessageType.Def:
                    DefData.Dispatch(linker, buffer);
                    break;

                case MessageType.Rpc:
                    RpcData.Dispatch(linker, buffer);
                    break;

                case MessageType.Query:
                    QueryData.Dispatch(linker, buffer);
                    break;
                }
            }
        }
Ejemplo n.º 21
0
        public void GetRoomDetail(KcpUser linker)
        {
            DataBuffer data = new DataBuffer();
            var        fake = new FakeStruct(data, Req.Length);

            fake[Req.Cmd]  = RpcCmd.RoomDetail;
            fake[Req.Type] = MessageType.Rpc;

            FakeStructArray gs = new FakeStructArray(data, 3, 3);

            for (int i = 0; i < 3; i++)
            {
                var user = gamers[i].userInfo;
                if (user != null)
                {
                    //gs[i, 0] = user.id;
                    //gs[i, 1] = 1000;//金币
                    //gs[i, 2] = gamers[i].ready;
                }
            }
            fake.SetData(Req.Args, gs);
            data.fakeStruct = fake;
            linker.Send(AES.Instance.Encrypt(data.ToBytes()), EnvelopeType.AesDataBuffer);
        }
Ejemplo n.º 22
0
        public void Reconnect(KcpUser linker)
        {
            if (linker.userInfo == null)
            {
                return;
            }
            var uid = linker.userInfo.id;

            for (int i = 0; i < 3; i++)
            {
                var user = gamers[i].userInfo;
                if (user == null)
                {
                    if (user.id == uid)
                    {
                        gamers[i].userInfo = linker.userInfo;
                        gamers[i].linker   = linker;
                        DataBuffer db   = new DataBuffer();
                        var        fake = new FakeStruct(db, Req.Length);
                        fake[Req.Cmd]  = RpcCmd.JoinRoom;
                        fake[Req.Type] = MessageType.Rpc;

                        FakeStruct gamerInfo = new FakeStruct(db, 3);
                        //gamerInfo[0] = i;//seat
                        //gamerInfo[1] = user.id;//uid
                        //gamerInfo[2] = RoomId;//roomid
                        fake.SetData(Req.Args, gamerInfo);
                        db.fakeStruct = fake;

                        linker.Send(AES.Instance.Encrypt(db.ToBytes()), EnvelopeType.AesDataBuffer);
                        GetRoomDetail(linker);
                        break;
                    }
                }
            }
        }
 static void GetServerIp(KcpUser linker, DataBuffer data)
 {
     linker.SendObject <ServerInfo>(ProCmd.ServerIp, MessageType.Pro, ServerTable.GetServer(0));
 }