コード例 #1
0
        private void Dispatch(Message message)
        {
            _003C_003Ec__DisplayClass19_0 _003C_003Ec__DisplayClass19_ = default(_003C_003Ec__DisplayClass19_0);

            _003C_003Ec__DisplayClass19_._003C_003E4__this = this;
            _003C_003Ec__DisplayClass19_.message           = message;
            MemoryBuffer buffer = _003C_003Ec__DisplayClass19_.message.Buffer;

            try
            {
                Stream.SetData(_003C_003Ec__DisplayClass19_.message.Buffer.Data, 0, _003C_003Ec__DisplayClass19_.message.Buffer.Length);
                _003C_003Ec__DisplayClass19_.request = AppRequest.Deserialize(Stream);
            }
            catch
            {
                DebugEx.LogWarning($"Malformed companion packet from {_003C_003Ec__DisplayClass19_.message.Connection.Address}");
                _003C_003Ec__DisplayClass19_.message.Connection.Close();
                throw;
            }
            finally
            {
                buffer.Dispose();
            }
            CompanionServer.Handlers.IHandler requestHandler;
            if (_003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, Info>((AppRequest r) => r.getInfo, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, CompanionServer.Handlers.Time>((AppRequest r) => r.getTime, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, Map>((AppRequest r) => r.getMap, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, TeamInfo>((AppRequest r) => r.getTeamInfo, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, TeamChat>((AppRequest r) => r.getTeamChat, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppSendMessage, SendTeamChat>((AppRequest r) => r.sendTeamMessage, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, EntityInfo>((AppRequest r) => r.getEntityInfo, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppSetEntityValue, SetEntityValue>((AppRequest r) => r.setEntityValue, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, CheckSubscription>((AppRequest r) => r.checkSubscription, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppFlag, SetSubscription>((AppRequest r) => r.setSubscription, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppEmpty, MapMarkers>((AppRequest r) => r.getMapMarkers, out requestHandler, ref _003C_003Ec__DisplayClass19_) || _003CDispatch_003Eg__Handle_007C19_12 <AppPromoteToLeader, PromoteToLeader>((AppRequest r) => r.promoteToLeader, out requestHandler, ref _003C_003Ec__DisplayClass19_))
            {
                try
                {
                    ValidationResult validationResult = requestHandler.Validate();
                    switch (validationResult)
                    {
                    case ValidationResult.Rejected:
                        _003C_003Ec__DisplayClass19_.message.Connection.Close();
                        break;

                    default:
                        requestHandler.SendError(Util.ToErrorCode(validationResult));
                        break;

                    case ValidationResult.Success:
                        requestHandler.Execute();
                        break;
                    }
                }
                catch (Exception arg)
                {
                    UnityEngine.Debug.LogError($"AppRequest threw an exception: {arg}");
                    requestHandler.SendError("server_error");
                }
                Facepunch.Pool.FreeDynamic(ref requestHandler);
            }
            else
            {
                AppResponse appResponse = Facepunch.Pool.Get <AppResponse>();
                appResponse.seq         = _003C_003Ec__DisplayClass19_.request.seq;
                appResponse.error       = Facepunch.Pool.Get <AppError>();
                appResponse.error.error = "unhandled";
                _003C_003Ec__DisplayClass19_.message.Connection.Send(appResponse);
                _003C_003Ec__DisplayClass19_.request.Dispose();
            }
        }