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); }
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); }
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; } }
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); } } }
public static void Dispatch(KcpUser linker, DataBuffer data) { int cmd = data.fakeStruct[Req.Cmd]; switch (cmd) { case DefCmd.Login: Login(linker, data); break; } }
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); }
public static void Dispatch(KcpUser linker, DataBuffer data) { int cmd = data.fakeStruct[Req.Cmd]; switch (cmd) { case QueryCmd.QueryRoom: QueryRoom(linker, data); break; } }
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; } }
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); } } }
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; } }
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); } }
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); } }
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; } }
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 { } }); }); } }); }
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); //} }
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; } } }
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); }
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)); }