public static void DoHandle(Client client, byte[] data, Server server) { BaseResponseData responseData = null; try { CreateRoomData createRoomData = Utils.ToObjectFromBytes <CreateRoomData>(data); if (!CreateRoom(createRoomData.Name, client, server)) { responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.RoomExist); server.SendResponseData(new List <Client>() { client }, (byte)responseData.Request, responseData); return; } responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.Ok); server.SendResponseData(new List <Client>() { client }, (byte)responseData.Request, responseData); Request_EnterInRoomHandler.AddClientInRoom(client, server.GetRoomByName(createRoomData.Name).ID, server); } catch (Exception e) { responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.Error); server.SendResponseData(new List <Client>() { client }, (byte)responseData.Request, responseData); Console.WriteLine("Error {0} - {1}", e.Message, e.StackTrace); } }
public async Task CreateRoomAndJoin(UserConnection connection, CreateRoomData data) { if (this.Rooms.Any(x => x.Name == data.Name)) { await connection.SendPacketAsync(new Packet(PacketType.Fail, new ReasonData() { Reason = "Room name already taken!" })); return; } var room = new ServerRoom(this); room.Name = data.Name; room.HostUserId = connection.GetUser().Id; room.Users.Add(connection.GetUser()); connection.SetRoom(room); this.Rooms.Add(room); await connection.SendPacketAsync(new Packet(PacketType.JoinRoom, null)); await Task.Delay(1500); await sendRoomUpdate(room); }
public bool Serialize(CreateRoomData data) { bool ret = true; ret &= Serialize(data.mapType); ret &= Serialize(data.roomName); return(ret); }
public void CreateRoom(string name) { if (client != null) { CreateRoomData createRoomData = new CreateRoomData(name); SendRequest(client, (byte)RequestTypes.CreateRoom, createRoomData); Debug.Log("Sended request \"CreateRoom\""); } }
public bool Serialize(CreateRoomData data) { bool ret = true; ret &= Serialize(data.DungeonId); ret &= Serialize(data.DungeonLevel); ret &= Serialize(data.RoomName); return(ret); }
//방 생성 -> Server public void CreateRoom(string roomName, int dungeonId, int dungeonLevel) { Debug.Log("방 생성"); CreateRoomData createRoomData = new CreateRoomData(dungeonId, dungeonLevel, roomName); CreateRoomPacket createRoomPacket = new CreateRoomPacket(createRoomData); createRoomPacket.SetPacketId((int)ClientPacketId.CreateRoom); DataPacket packet = new DataPacket(CreatePacket(createRoomPacket), null); sendMsgs.Enqueue(packet); }
public int CreateRoom(Socket player, HeroData heroData, CreateRoomData createRoomData) { int index = FindEmptyRoom(); if(index < 0) { Console.WriteLine("최대 생성 개수를 초과했습니다."); return -1; } string dungeonName = DungeonDatabase.Instance.GetDungeonBaseData(createRoomData.DungeonId).Name; Console.WriteLine(dungeonName); room[index] = new Room(createRoomData.RoomName, dungeonName, createRoomData.DungeonId, createRoomData.DungeonLevel); return index; }
public bool Deserialize(ref CreateRoomData element) { if (GetDataSize() == 0) { // 데이터가 설정되지 않았다. return(false); } bool ret = true; byte mapType = 0; string total; ret &= Deserialize(ref mapType); ret &= Deserialize(out total, (int)GetDataSize() - 1); element.mapType = mapType; element.roomName = total; return(ret); }
public bool Deserialize(ref CreateRoomData element) { if (GetDataSize() == 0) { // 데이터가 설정되지 않았다. return(false); } bool ret = true; byte dungeonId = 0; byte dungeonLevel = 0; string total; ret &= Deserialize(ref dungeonId); ret &= Deserialize(ref dungeonLevel); ret &= Deserialize(out total, (int)GetDataSize()); element = new CreateRoomData(dungeonId, dungeonLevel, total); return(ret); }
public ServerPacketId CreateRoom(byte[] data) { Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 방 생성"); CreateRoomPacket createRoomPacket = new CreateRoomPacket(data); CreateRoomData createRoomData = createRoomPacket.GetData(); Console.WriteLine("방 타입 : " + (int)createRoomData.mapType + "방 제목 : " + createRoomData.roomName); int index = roomManager.CreateRoom(tcpPacket.client, ((TcpClient)LoginUser [tcpPacket.client]).Id, createRoomData.roomName, (int)createRoomData.mapType); if (index != 0) { Console.WriteLine("방 생성 성공"); } else { Console.WriteLine("방 생성 실패"); } msg[0] = (byte)index; return(ServerPacketId.RoomCreateResult); }
//방 생성 public void CreateRoom(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "방 생성"); CreateRoomPacket createRoomPacket = new CreateRoomPacket(packet.msg); CreateRoomData createRoomData = createRoomPacket.GetData(); string id = ""; try { id = loginUser[packet.client]; } catch { Console.WriteLine("현재 로그인 되어있지 않은 아이디 입니다."); return; } int characterId = userState[id].characterId; if (characterId == -1) { Console.WriteLine("캐릭터가 선택되지 않았습니다."); return; } Console.WriteLine("Id : " + id); Console.WriteLine("characterId : " + characterId); Console.WriteLine("방 제목 : " + createRoomData.RoomName); int result = roomManager.CreateRoom(packet.client, database.GetHeroData(id, characterId), createRoomData); Console.WriteLine("방 생성 번호 : " + result); RoomNumberData resultData = new RoomNumberData(result); RoomNumberPacket resultPacket = new RoomNumberPacket(resultData); resultPacket.SetPacketId((int)ServerPacketId.CreateRoomNumber); byte[] msg = CreatePacket(resultPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } List <string> clients = new List <string>(loginUser.Values); foreach (string client in clients) { if (userState.ContainsKey(client)) { if (userState[client].state == -1) { packet = new DataPacket(new byte[0], FindSocketWithId(client)); RequestRoomList(packet); } } } }