예제 #1
0
        public bool Handle(IClientObject client, RequestObject request)
        {
            if (request.Module != "history")
            {
                return(false);
            }
            object[] args = JsonConvert.DeserializeObject <object[]>(request.Args.ToString());
            DateTime last;

            switch (request.Cmd)
            {
            case "room":
                string rstr = args[0] as string;
                string time = args[1].ToString();
                last = DateTime.Parse(time).ToUniversalTime();
                ChatMessage[] h = Manager.FindRoom(rstr)?.GetMessageHistoryTo(last);
                client.SendMessage(ResponseConstructor.GetRoomHistoryResponse(rstr, h));
                break;

            case "private":
                string user1 = (string)args[0];
                string user2 = (string)args[1];
                time = args[2].ToString();
                last = DateTime.Parse(time).ToUniversalTime();
                h    = HistoryDataprovider.GetPrivateHistory(user1, user2, last);
                client.SendMessage(ResponseConstructor.GetPrivateHistoryResponse(user2, h));
                break;

            default: break;
            }

            return(true);
        }
예제 #2
0
        protected virtual void HandleActive(IClientObject client, RequestObject request)
        {
            RoomObject room = null;

            room = Manager.FindRoom(request.Args.ToString());

            if (room != null)
            {
                room.AddListener(this);

                LogProvider.AppendRecord(string.Format("[{0}]: entered room {1}", client.Username, room.Name));
                ChatMessage[] msgs = room.GetMessageHistoryTo(DateTime.Now);
                if (msgs.Length > 0)
                {
                    client.SendMessage(ResponseConstructor.GetRoomHistoryResponse(room.Name, msgs));
                }
            }
        }