using System; using System.Collections.Generic; using System.Linq; using System.Text; using Chop.Game.Messages.IDs; using Chop.Game.Rooms; using Chop.Game.User; using Chop.Rooms; namespace Chop.Game.Messages.Incoming.room.session { class OpenConnectionMessageComposer: IMessageHandler { public void Handle(GameClient client, RequestParser parser) { bool unused1 = parser.ReadBoolean(); // always true int roomID = parser.ReadInt32(); int unused2 = parser.ReadInt32(); // always 0 NavigatorRoom room = Core.NavigatorManager.GetRoom(roomID); if (room == null) { ResponseBuilder errorMessage = new ResponseBuilder(OutgoingMessages.NoSuchFlatEvent); errorMessage.AppendInt32(roomID); // flatId client.SendMessage(errorMessage); return; } ResponseBuilder message = new ResponseBuilder(OutgoingMessages.InterstitialMessageEvent); message.AppendString("http://"); // imageUrl message.AppendString("http://boards.4chan.org/b/"); // clickUrl client.SendMessage(message); if (client.mRoom != null) { client.mRoomUser.Destroy(); } client.mRoomUser = new RoomUser(); client.mRoomUser.mClient = client; client.mRoomUser.mEnteringRoomID = roomID; // All checks done, notify client. message = message = new ResponseBuilder(OutgoingMessages.OpenConnectionMessageEvent); client.SendMessage(message); message = new ResponseBuilder(OutgoingMessages.RoomReadyMessageEvent); message.AppendString(room.mModel); // if starts with "model_", roomCategory = 1 message.AppendInt32(roomID); client.SendMessage(message); //OutgoingMessages.UserNotificationMessageEvent if (!room.IsPublic) return; if (Core.RoomManager.ContainsRoom(client.mRoomUser.mEnteringRoomID)) client.mRoom = Core.RoomManager.GetRoom(client.mRoomUser.mEnteringRoomID); else { client.mRoom = Room.Load(client.mRoomUser.mEnteringRoomID); Core.RoomManager.AddRoom(client.mRoom); } client.mRoom.AddUser(client.mRoomUser); message = new ResponseBuilder(OutgoingMessages.HeightMapMessageEvent); message.AppendString(client.mRoom.mTemplate.Heightmap); client.SendMessage(message); message = new ResponseBuilder(OutgoingMessages.FloorHeightMapMessageEvent); message.AppendString(client.mRoom.mTemplate.Heightmap); client.SendMessage(message); message = new ResponseBuilder(OutgoingMessages.UsersMessageEvent); message.AppendInt32(client.mRoom.mUsers.Count); foreach (RoomUser user in client.mRoom.mUsers.Values) { user.AddToMessage(message); } client.SendMessage(message); } } }