Esempio n. 1
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_SPOTMOVE)protocol;

            if (sessionState.RoomID == inboundPacket.roomID)
            {
                var room = dbContext.GetRoom(sessionState.RoomID);

                if (!room.NotFound)
                {
                    foreach (var spot in room.Hotspots)
                    {
                        if (spot.id == inboundPacket.spotID)
                        {
                            spot.loc = inboundPacket.pos;

                            break;
                        }
                    }

                    room.HasUnsavedAuthorChanges = true;
                    room.HasUnsavedChanges       = true;

                    ServerState.FlushRooms(dbContext);

                    SessionManager.SendToRoomID(sessionState.RoomID, sessionState.UserID, inboundPacket, EventTypes.MSG_SPOTMOVE, 0);
                }
            }
        }
Esempio n. 2
0
        public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args)
        {
            var sessionState = SessionManager.sessionStates[UserID];
            var xtlk         = new MSG_XTALK();

            if (TargetID == 0)
            {
                xtlk.text = "Sorry, you must target a user to use this command.";

                sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0);
            }
            else
            {
                var targetSessionState = SessionManager.sessionStates[TargetID];

                targetSessionState.userFlags       |= (short)UserFlags.U_PropGag;
                targetSessionState.details.nbrProps = 0;
                targetSessionState.details.propSpec = null;

                SessionManager.SendToRoomID(targetSessionState.RoomID, 0, new MSG_USERPROP
                {
                    nbrProps = 0,
                    propSpec = null,
                }, EventTypes.MSG_USERPROP, (Int32)TargetID);

                xtlk.text = $"User {targetSessionState.details.name} is now propgagged!";

                SessionManager.SendToRoomID(targetSessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0);
            }

            return(true);
        }
Esempio n. 3
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_ROOMINFO)protocol;

            if (sessionState.RoomID == inboundPacket.room.roomID)
            {
                var room = dbContext.GetRoom(sessionState.RoomID);

                if (!room.NotFound)
                {
                    room.Name    = inboundPacket.room.roomName;
                    room.Flags   = inboundPacket.room.roomFlags;
                    room.Picture = inboundPacket.room.roomPicture;
                    room.Artist  = inboundPacket.room.roomArtist;
                    room.FacesID = inboundPacket.room.facesID;

                    //room.HasUnsavedAuthorChanges = true;
                    room.HasUnsavedChanges = true;

                    ServerState.FlushRooms(dbContext);

                    SessionManager.SendToRoomID(sessionState.RoomID, 0, room, EventTypes.MSG_ROOMSETDESC, 0);
                }
            }
        }
Esempio n. 4
0
        public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args)
        {
            if (args.Length > 0)
            {
                Logger.Log(MessageTypes.Info, $"CMD_SUSR[{UserID}]: {args[0]}");
            }

            var sessionState = SessionManager.sessionStates[UserID];

            AuthEngine.AuthorizeUser(dbContext, new Message
            {
                sessionState = sessionState,
                protocol     = new MSG_SUPERUSER
                {
                    password = args.FirstOrDefault(),
                },
            }, out int AuthUserID, out List <int> AuthRoleIDs, out List <int> AuthMsgIDs, out List <string> AuthCmds);

            sessionState.Authorized  = (AuthUserID != 0);
            sessionState.AuthUserID  = AuthUserID;
            sessionState.AuthRoleIDs = AuthRoleIDs;
            sessionState.AuthMsgIDs  = AuthMsgIDs;
            sessionState.AuthCmds    = AuthCmds;

            return(true);
        }
Esempio n. 5
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;

            // Send User Log 'endr'
            sessionState.Send(null, EventTypes.MSG_ROOMDESCEND, (Int32)sessionState.UserID);
        }
Esempio n. 6
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var mediaState   = ((Message)message).mediaState;

            sessionState.Send(mediaState.mediaStream, EventTypes.MSG_FILESEND, 0);
        }
Esempio n. 7
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_DOORLOCK)protocol;

            if (inboundPacket.roomID == sessionState.RoomID)
            {
                var room = dbContext.GetRoom(sessionState.RoomID);

                if (!room.NotFound)
                {
                    var hotspotType = room.Hotspots
                                      .Where(s => s.id == inboundPacket.spotID)
                                      .Select(s => (short)s.type)
                                      .FirstOrDefault();

                    if (hotspotType == (short)HotspotTypes.HS_Bolt)
                    {
                        room.Flags |= (int)RoomFlags.RF_Closed;

                        SessionManager.SendToRoomID(sessionState.RoomID, 0, inboundPacket, EventTypes.MSG_DOORLOCK, (Int32)sessionState.UserID);
                    }
                    else
                    {
                        var outboundPacket = new Protocols.MSG_XTALK
                        {
                            text = "The door you are attempting to lock is not a deadbolt!",
                        };

                        sessionState.Send(outboundPacket, EventTypes.MSG_XTALK, 0);
                    }
                }
            }
        }
Esempio n. 8
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_USERPROP)protocol;

            if (!sessionState.Authorized)
            {
                if ((sessionState.userFlags & (int)(UserFlags.U_PropGag | UserFlags.U_Pin)) != 0)
                {
                    inboundPacket.nbrProps = 0;
                    inboundPacket.propSpec = null;

                    SessionManager.Send(sessionState, inboundPacket, EventTypes.MSG_USERPROP, (Int32)sessionState.UserID);

                    return;
                }
            }

            sessionState.details.nbrProps = inboundPacket.nbrProps;
            sessionState.details.propSpec = inboundPacket.propSpec;

            AssetLoader.CheckAssets(sessionState, inboundPacket.propSpec);

            SessionManager.SendToRoomID(sessionState.RoomID, 0, inboundPacket, EventTypes.MSG_USERPROP, (Int32)sessionState.UserID);
        }
Esempio n. 9
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var protocol     = ((Message)message).protocol;

            if (!sessionState.Authorized)
            {
                if ((sessionState.userFlags & (int)UserFlags.U_NameGag) != 0)
                {
                    return;
                }
            }

            var inboundPacket = (Protocols.MSG_USERNAME)protocol;

            if (string.IsNullOrWhiteSpace(inboundPacket.name) || Regex.IsMatch(inboundPacket.name, @"^User\s*[0-9]+$", RegexOptions.IgnoreCase | RegexOptions.Singleline))
            {
                inboundPacket.name = $"User {sessionState.UserID}";
            }

            Logger.Log(MessageTypes.Info, $"MSG_USERNAME[{sessionState.UserID}]: {inboundPacket.name}");

            sessionState.details.name = inboundPacket.name;

            SessionManager.SendToRoomID(sessionState.RoomID, 0, inboundPacket, EventTypes.MSG_USERNAME, (Int32)sessionState.UserID);
        }
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState   = ((Message)message).sessionState;
            var listOfAllUsers = new Protocols.MSG_LISTOFALLUSERS();

            sessionState.Send(listOfAllUsers, EventTypes.MSG_LISTOFALLUSERS, 0);
        }
Esempio n. 11
0
        public static void FlushRooms(ThePalaceEntities dbContext)
        {
            roomsCache.Values
            .ToList()
            .ForEach(r =>
            {
                var nbrUsers = SessionManager.GetRoomUserCount(r.ID);

                if (r.HasUnsavedChanges)
                {
                    if (nbrUsers < 1 && (r.Flags & (int)RoomFlags.RF_Closed) != 0)
                    {
                        r.Flags &= ~(int)RoomFlags.RF_Closed;
                    }

                    r.Write(dbContext);
                }

                if (nbrUsers < 1 && (r.Flags & (int)RoomFlags.RF_DropZone) == 0)
                {
                    lock (roomsCache)
                    {
                        roomsCache.Remove(r.ID);
                    }
                }
            });
        }
Esempio n. 12
0
        public static RoomBuilder GetRoom(this ThePalaceEntities dbContext, Int16 roomID)
        {
            var room = (RoomBuilder)null;

            if (ServerState.roomsCache.ContainsKey(roomID))
            {
                room = ServerState.roomsCache[roomID];
            }
            else
            {
                room = new RoomBuilder();

                if (room == null)
                {
                    throw new OutOfMemoryException("Unable to initiate RoomBuilder instance.");
                }

                room.ID = roomID;

                room.Read(dbContext);

                if (!room.NotFound)
                {
                    lock (ServerState.roomsCache)
                    {
                        ServerState.roomsCache.TryAdd(room.ID, room);
                    }
                }
            }

            return(room);
        }
Esempio n. 13
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;

            AuthEngine.AuthorizeUser(dbContext, message, out int AuthUserID, out List <int> AuthRoleIDs, out List <int> AuthMsgIDs, out List <string> AuthCmds);

            //sessionState = SessionManager.sessionStates[sessionState.UserID];
            sessionState.Authorized  = (AuthUserID != 0);
            sessionState.AuthUserID  = AuthUserID;
            sessionState.AuthRoleIDs = AuthRoleIDs;
            sessionState.AuthMsgIDs  = AuthMsgIDs;
            sessionState.AuthCmds    = AuthCmds;

            if (sessionState.Authorized)
            {
                new MSG_LOGON().Send(dbContext, message);
            }
            else
            {
                new MSG_SERVERDOWN
                {
                    reason     = ServerDownFlags.SD_LoggedOff,
                    whyMessage = "Authentication Failure!",
                }.Send(dbContext, message);
            }
        }
Esempio n. 14
0
        public static bool ReadRoom(this ThePalaceEntities dbContext, Int16 roomID, out RoomRec roomData)
        {
            var room = dbContext.Rooms.AsNoTracking()
                       .Where(r => r.RoomId == roomID)
                       .Join(
                dbContext.RoomData.AsNoTracking(),
                r => r.RoomId,
                e => e.RoomId,
                (r, e) => new { r, e }
                )
                       .FirstOrDefault();

            if (room == null)
            {
                roomData = null;

                return(false);
            }

            roomData = new RoomRec
            {
                roomID           = room.r.RoomId,
                roomName         = room.r.Name,
                roomFlags        = room.r.Flags,
                roomMaxOccupancy = room.r.MaxOccupancy,
                roomLastModified = room.r.LastModified ?? room.r.CreateDate,

                facesID      = room.e.FacesId,
                roomArtist   = room.e.ArtistName,
                roomPicture  = room.e.PictureName,
                roomPassword = room.e.Password,
            };

            return(true);
        }
Esempio n. 15
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var assetState   = ((Message)message).assetState;

            sessionState.Send(assetState.assetStream, EventTypes.MSG_ASSETSEND, 0);
        }
Esempio n. 16
0
        public void SendToStaff(ThePalaceEntities dbContext, object message)
        {
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_XTALK)protocol;

            SessionManager.SendToStaff(inboundPacket, EventTypes.MSG_XTALK, 0);
        }
Esempio n. 17
0
        public void SendToRoomID(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var userNew      = new Protocols.MSG_USERNEW();

            SessionManager.SendToRoomID(sessionState.RoomID, 0, userNew, EventTypes.MSG_USERNEW, (int)sessionState.UserID);
        }
Esempio n. 18
0
        public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args)
        {
            var sessionState = SessionManager.sessionStates[UserID];

            if (sessionState.extended.ContainsKey("OfferBuffer"))
            {
                var userProp = new MSG_USERPROP
                {
                    propSpec = (AssetSpec[])sessionState.extended["OfferBuffer"],
                };
                userProp.nbrProps = (Int16)userProp.propSpec.Length;

                sessionState.Send(userProp, EventTypes.MSG_USERPROP, (Int32)UserID);
            }
            else
            {
                var xtlk = new MSG_XTALK
                {
                    text = $"No one has offered you their avatar.",
                };

                sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0);
            }

            return(true);
        }
Esempio n. 19
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var userList     = new Protocols.MSG_USERLIST();

            sessionState.Send(userList, EventTypes.MSG_USERLIST, (Int32)SessionManager.GetRoomUserCount(sessionState.RoomID, sessionState.UserID));
        }
Esempio n. 20
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_PICTMOVE)protocol;

            SessionManager.SendToRoomID(sessionState.RoomID, 0, inboundPacket, EventTypes.MSG_PICTMOVE, 0);
        }
Esempio n. 21
0
        public void SendToUserID(ThePalaceEntities dbContext, Message message)
        {
            var sessionState  = ((Message)message).sessionState;
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_XTALK)protocol;

            SessionManager.SendToUserID(sessionState.UserID, inboundPacket, EventTypes.MSG_XTALK, 0);
        }
Esempio n. 22
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;

            sessionState.driver.DropConnection();

            SendToServer(dbContext, message);
        }
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var protocol     = ((Message)message).protocol;

            var inboundPacket = (Protocols.MSG_EXTENDEDINFO)protocol;

            sessionState.Send(inboundPacket, EventTypes.MSG_EXTENDEDINFO, (Int32)sessionState.UserID);
        }
Esempio n. 24
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var protocol     = ((Message)message).protocol;

            var outboundPacket = (Protocols.MSG_ASSETQUERY)protocol;

            sessionState.Send(outboundPacket, EventTypes.MSG_ASSETQUERY, 0);
        }
Esempio n. 25
0
        public void SendToServer(ThePalaceEntities dbConetxt, object message)
        {
            var serverDown = new Protocols.MSG_SERVERDOWN
            {
                whyMessage = whyMessage,
            };

            SessionManager.SendToServer(serverDown, EventTypes.MSG_SERVERDOWN, (Int32)reason);
        }
Esempio n. 26
0
        public void SendToUser(ThePalaceEntities dbContext, object message, UInt32 TargetID)
        {
            var protocol = ((Message)message).protocol;
            var header   = ((Message)message).header;

            var inboundPacket = (Protocols.MSG_BLOWTHRU)protocol;

            SessionManager.SendToUserID(TargetID, inboundPacket, EventTypes.MSG_BLOWTHRU, header.refNum);
        }
Esempio n. 27
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var version      = Assembly.GetExecutingAssembly().GetName().Version;

            // Send Server Version 'vers'

            sessionState.Send(null, EventTypes.MSG_VERSION, (((version.Major & 0xFFFF) << 16) | (version.Minor & 0xFFFF)));
        }
Esempio n. 28
0
        public void Send(ThePalaceEntities dbContext, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var diyit        = new Protocols.MSG_DIYIT
            {
                ipAddress = sessionState.driver.GetIPAddress(),
            };

            sessionState.Send(diyit, EventTypes.MSG_DIYIT, (Int32)sessionState.UserID);
        }
Esempio n. 29
0
        public void Receive(ThePalaceEntities dbContext, object message)
        {
            var protocol      = ((Message)message).protocol;
            var inboundPacket = (Protocols.MSG_KILLUSER)protocol;
            var targetSession = SessionManager.sessionStates[inboundPacket.target];

            targetSession.Send(null, EventTypes.MSG_SERVERDOWN, (Int32)ServerDownFlags.SD_KilledBySysop);

            targetSession.driver.DropConnection();
        }
Esempio n. 30
0
        public void Send(ThePalaceEntities dbConetxt, object message)
        {
            var sessionState = ((Message)message).sessionState;
            var serverDown   = new Protocols.MSG_SERVERDOWN
            {
                whyMessage = whyMessage,
            };

            sessionState.Send(serverDown, EventTypes.MSG_SERVERDOWN, (Int32)reason);
        }