Exemplo n.º 1
0
        public static void TraceMessage(TraceLevel level, Message msg, string extraText)
        {
            CampfireState campState = CampfireState.Instance;
            IList <CampfireState.UserInfo> allUsers = campState.Users;

            CampfireState.UserInfo user = allUsers.FirstOrDefault(u => u.Id == msg.UserId);
            string userName             = (user != null) ? user.NickName : msg.UserId.ToString();

            CampfireState.RoomInfo room = campState.Rooms.FirstOrDefault(r => r.Id == msg.RoomId);
            string roomName             = (room != null) ? room.Name : msg.RoomId.ToString();

            TraceMessage(level, string.Format("At: {0}, User: {1}, Room: {2}, {3}{4}{5}",
                                              msg.PostedAt.ToString(), userName, roomName,
                                              (extraText ?? ""), (!string.IsNullOrEmpty(extraText)) ? ": " : "", msg.TrimmedBody));
        }
Exemplo n.º 2
0
        private static void ProcessTextMessage(CampfireState campfireInfo, Message msg, ICampfireAPI api)
        {
            // The person that posted this message... If they have a pending notification in the room... then cancel it... they've spoken
            campfireInfo.RemovePendingNotification(msg.UserId, msg.RoomId, msg.PostedAt, true);

            IList <CampfireState.UserInfo> allUsers = campfireInfo.Users;

            IList <CampfireState.UserReference> lazyNotificationUsers;
            IList <CampfireState.UserReference> immediateNotificationUsers;
            IList <CampfireState.UserReference> smokeSignalReferences;

            Utils.FindUserReferences(msg.Body, allUsers, out lazyNotificationUsers, out immediateNotificationUsers, out smokeSignalReferences);

            CampfireState.UserInfo source = allUsers.FirstOrDefault(u => u.Id == msg.UserId);
            CampfireState.RoomInfo room   = CampfireState.Instance.Rooms.FirstOrDefault(r => r.Id == msg.RoomId);

            // special smoke signal commands only make sense if a legitimate user issued them
            if (source != null)
            {
                foreach (CampfireState.UserReference ri in smokeSignalReferences)
                {
                    ri.SourceUser = source;
                    ri.Room       = room;
                    ProcessSmokeSignalCommands(source.Id, ri);
                }
            }

            foreach (CampfireState.UserReference ri in immediateNotificationUsers)
            {
                ri.SourceUser = source;
                ri.Room       = room;
                campfireInfo.AddPendingNotification(ri, msg.PostedAt.AddSeconds(0));
            }
            foreach (CampfireState.UserReference ri in lazyNotificationUsers)
            {
                ri.SourceUser = source;
                ri.Room       = room;

                int delay = ri.TargetUser.DelayInMinutes > 0 ? ri.TargetUser.DelayInMinutes : SmokeSignalConfig.Instance.DelayBeforeSmokeSignalInMinutes;
                campfireInfo.AddPendingNotification(ri, msg.PostedAt.AddSeconds(delay * 60));
            }
        }