コード例 #1
0
        public MainMessage HandleMessage(MainMessage msg)
        {
            RoomMsg roomMsg  = msg.RoomMsg;
            int     serverId = 0;

            switch (roomMsg.MessageTypeCase)
            {
            case RoomMsg.MessageTypeOneofCase.RoomCreate:
                return(RoomCreate(msg.MsgId, msg.ClientId, msg));

            case RoomMsg.MessageTypeOneofCase.RoomDetail:
                return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message."));

            case RoomMsg.MessageTypeOneofCase.RoomEnter:
                serverId = _roomsPerServer.Where(x => x.Value.Find(y => y.Id == msg.RoomMsg.RoomEnter.RoomId) != null).FirstOrDefault().Key;
                if (serverId == 0)
                {
                    return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Room with this ID could not be found."));
                }
                return(ISystemService.CreateRedirectMessage(msg, _api.Services.System.GetAddressById((uint)serverId)));

            case RoomMsg.MessageTypeOneofCase.RoomExit:
                serverId = _roomsPerServer.Where(x => x.Value.Find(y => y.Id == msg.RoomMsg.RoomExit.RoomId) != null).FirstOrDefault().Key;
                if (serverId == 0)
                {
                    return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Room with this ID could not be found."));
                }
                return(ISystemService.CreateRedirectMessage(msg, _api.Services.System.GetAddressById((uint)serverId)));

            case RoomMsg.MessageTypeOneofCase.RoomList:
                if (msg.SenderIdCase == MainMessage.SenderIdOneofCase.ClientId)
                {
                    return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message."));
                }
                return(RoomListServer(msg.MsgId, (int)msg.ServerId, msg.RoomMsg.RoomList));

            case RoomMsg.MessageTypeOneofCase.RoomQuery:
                switch (msg.RoomMsg.RoomQuery.RoomQueryCase)
                {
                case RoomQuery.RoomQueryOneofCase.RoomDetailId:
                    return(RoomDetail(msg.MsgId, msg.RoomMsg.RoomQuery.RoomDetailId));

                case RoomQuery.RoomQueryOneofCase.RoomListQuery:
                    return(RoomListClient(msg.RoomMsg.RoomQuery.RoomListQuery));

                default:
                    return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message."));
                }

            default:
                return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message."));
            }
        }
コード例 #2
0
 public MainMessage HandleMessage(MainMessage msg)
 {
     if (msg.SenderIdCase == MainMessage.SenderIdOneofCase.ServerId)
     {
         return(HandleServerMessage(msg));
     }
     else if (msg.UserMngMsg.UserMsg.UserRequestMsg.ListQuery != null)
     {
         return(HandleListRoomUsers(msg));
     }
     return(ISystemService.CreateRedirectMessage(msg, _api.OpenAPI.Config.MainServer));
 }
コード例 #3
0
        private MainMessage RoomCreate(ulong msgId, ulong clientId, MainMessage msg)
        {
            if (_roomsPerServer.Count == 0)
            {
                return(ISystemService.CreateErrorMessage(msgId, 0, 0, "There is currently no computing server."));
            }
            int serverId = 1;

            foreach (KeyValuePair <int, List <Room> > pair in _roomsPerServer)
            {
                lock (_roomsPerServer[pair.Key])
                {
                    if (_api.Services.System.IsAlive((ulong)pair.Key) && pair.Value.Count < _roomsPerServer[serverId].Count)
                    {
                        serverId = pair.Key;
                    }
                }
            }

            IPEndPoint redirect = _api.Services.System.GetAddressById((uint)serverId);

            return(ISystemService.CreateRedirectMessage(msg, redirect));
        }