Example #1
0
        private void RoomMessageHandler(ClientSendMessageToRoom command, int streamId, CommandAnswerContext answerContext)
        {
            var result  = new ServerResponseBase();
            var message = command.Message;
            var room    = command.Room;

            lock (_users)
            {
                var ctx = ValidateUser(streamId, answerContext, result);
                if (answerContext.Answered)
                {
                    return;
                }
                if (!ctx.Rooms.Contains(room))
                {
                    result.Status      = ServerResponseStatus.Error;
                    result.Description = $"You not in the room '{room}'!";
                    answerContext.TryAnswer(result);
                    return;
                }
                var dests      = _users.Where(u => u.Rooms.Contains(room)).Select(u => u.Stream).ToArray();
                var messageCmd = new ServerRoomMessage
                {
                    FromUser = ctx.Name,
                    Message  = message,
                    Room     = room
                };
                _commandHandler.Notify(messageCmd, dests);
            }
        }
Example #2
0
        private void JoinRoomHandler(ClientJoinRoomRequest command, int streamId, CommandAnswerContext answerContext)
        {
            var         result = new ServerResponseBase();
            UserContext ctx    = null;
            var         room   = command.RoomName;

            lock (_users)
            {
                ctx = ValidateUser(streamId, answerContext, result);
                if (answerContext.Answered)
                {
                    return;
                }
                if (ctx.Rooms.Contains(room))
                {
                    result.Status      = ServerResponseStatus.Error;
                    result.Description = $"Already in room {room}";
                    answerContext.TryAnswer(result);
                    return;
                }
                ctx.Rooms.Add(room);
            }
            result.Status = ServerResponseStatus.Success;
            answerContext.TryAnswer(result);
            _commandHandler.Notify(new ServerServiceMessage()
            {
                Message = $"{ctx.Name}, welcome to '{room}'!"
            }, streamId);
        }
Example #3
0
 static void ProcessResponse(ServerResponseBase resp)
 {
     if (resp.Status != ServerResponseStatus.Error)
     {
         return;
     }
     Console.WriteLine($"Error: " + resp.Description);
 }
Example #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            IServerResponse res = ServerResponseBase.GetServerResponseInstance();

            try
            {
                IPeerRequest rq = PeerRequestBase.GetRequestInstance(Request.RawUrl);

                Trace.Write("Request Object = " + rq);

                IPeer peer = PeerBase.GetPeer();
                peer.IP     = (string.IsNullOrEmpty(rq.IP)) ? Request.UserHostAddress : rq.IP;
                peer.Port   = rq.Port;
                peer.PeerID = rq.PeerID;

                IPeerPoolManager manager = PeerPoolManagerBase.GetPeerPoolManager();
                IPeerPool        pool    = manager.GetPeerPoolByInfoHash(rq.InfoHash);
                pool.AddPeer(peer);

                res.Interval    = Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]);
                res.MinInterval = Convert.ToInt32(ConfigurationManager.AppSettings["MinInterval"]);

                foreach (IPeer p in pool.GetPeerList())
                {
                    if (p.IP == peer.IP && p.Port == peer.Port)
                    {
                        continue;                                           // skip the request peer itself
                    }
                    res.Peers.Add(p);
                }

                Response.Clear();
                byte[] binRes = res.GetBinaryResponse();
                Trace.Write("binRes=" + HexEncoding.ToString(binRes));
                Response.BinaryWrite(binRes);
            }
            catch (Exception Ex)
            {
                Trace.Write("ERROR: " + Ex);
                res.FailureReason = Ex.ToString();
                Response.Clear();
                Response.Write(res);
            }
            Response.End();
        }
Example #5
0
 private UserContext ValidateUser(int streamId, CommandAnswerContext answerContext, ServerResponseBase responseBase)
 {
     lock (_users)
     {
         var ctx = _users.FirstOrDefault(u => u.Stream == streamId);
         if (ctx == null)
         {
             responseBase.Status      = ServerResponseStatus.Error;
             responseBase.Description = "User not logged in";
             answerContext.TryAnswer(responseBase);
             return(null);
         }
         return(ctx);
     }
 }